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); }
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); }