예제 #1
0
        private static int QuickSortUnit <T>(List <T> array, int low, int high, QuickSortCompare <T> compare)
        {
            T key = array[low];

            while (low < high)
            {
                /*从后向前搜索比key小的值*/
                //while (array[high] >= key && high > low)
                while ((!compare(array[high], key)) && high > low)
                {
                    --high;
                }
                /*比key小的放左边*/
                array[low] = array[high];
                /*从前向后搜索比key大的值,比key大的放右边*/
                while ((compare(array[low], key)) && high > low)
                {
                    ++low;
                }
                /*比key大的放右边*/
                array[high] = array[low];
            }
            /*左边都比key小,右边都比key大。//将key放在游标当前位置。//此时low等于high */
            array[low] = key;
            return(high);
        }
예제 #2
0
        public static void QuickSort <T>(List <T> array, int low, int high, QuickSortCompare <T> compare)
        {
            if (compare == null)
            {
                return;
            }
            if (low >= high)
            {
                return;
            }
            /*完成一次单元排序*/
            int index = QuickSortUnit(array, low, high, compare);

            /*对左边单元进行排序*/
            QuickSort(array, low, index - 1, compare);
            /*对右边单元进行排序*/
            QuickSort(array, index + 1, high, compare);
        }