1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| public static class SortingSupport { public delegate bool CompareLess<T>(T t1, T t2);
static void Swap<T>(T[] a, int i, int j) { T temp = a[i]; a[i] = a[j]; a[j] = temp; }
#region 快速排序 public static void QuickSort<T>(T[] a, CompareLess<T> cp) { QSort(a, 0, a.Length - 1, cp); }
static void QSort<T>(T[] a,int p,int r, CompareLess<T> cp) { if (p >= r) return; int i = Partition(a, p, r, cp); QSort(a, p, i - 1, cp); QSort(a, i + 1, r, cp); }
static int Partition<T>(T[] a,int p, int r, CompareLess<T> cp) { T x = a[r]; int i = p - 1; for(int j = p;j < r ;j ++) { if(cp(a[j],x)) { i++; Swap(a, i, j); } } Swap(a, i + 1, r); return i + 1; } #endregion }
|