private static int Partition(IComparable[] a, int lo, int hi) { int i = lo, j = hi + 1; IComparable v = a[lo]; while (true) { while (SortHelper.Less(a[++i], v)) { if (i == hi) { break; } } while (SortHelper.Less(v, a[--j])) { if (j == lo) { break; } } if (i >= j) { break; } SortHelper.Exchange(a, i, j); } SortHelper.Exchange(a, lo, j); return(j); }
private static int Partition <Key>(Key[] a, IComparer <Key> c, int lo, int hi) where Key : class { int i = lo, j = hi + 1; Key v = a[lo]; while (true) { while (SortHelper.Less(c, a[++i], v)) { if (i == hi) { break; } } while (SortHelper.Less(c, v, a[--j])) { if (j == lo) { break; } } if (i >= j) { break; } SortHelper.Exchange(a, i, j); } SortHelper.Exchange(a, lo, j); return(j); }