private static void Sort(IList <T> list, int left, int right, bool isAsc) { int i, j; T pivot; if (left < right) { i = left; j = right + 1; if (isAsc) { while (i < j) { i++; pivot = list[left]; while (i < right && list[i].CompareTo(pivot) < 0) { i++; } j--; while (j >= left && list[j].CompareTo(pivot) > 0) { j--; } if (i < j) { list.Swap <T>(i, j); } } } else { while (i < j) { i++; pivot = list[left]; while (i < right && list[i].CompareTo(pivot) > 0) { i++; } j--; while (j >= left && list[j].CompareTo(pivot) < 0) { j--; } if (i < j) { list.Swap <T>(i, j); } } } list.Swap <T>(left, j); QuickSorter <T> .Sort(list, left, j - 1, isAsc); QuickSorter <T> .Sort(list, j + 1, right, isAsc); } }
/// <summary> /// 快速排序 /// </summary> /// <param name="list"></param> /// <param name="isAsc"></param> public static void Sort(IList <T> list, bool isAsc) { QuickSorter <T> .Sort(list, 0, list.Count - 1, isAsc); }