partition() 方法
private static int partition(Comparable[] a, int lo, int hi) {
int i = lo, j = hi + 1;
Comparable v = a[lo];
while(true) {
while(less(a[++i], v) && i < hi);
while(less(v, a[--j]) && j > lo);
if (i >= j) break;
exch(a, i, j);
}
// 循环跳出时,i >= j, 此时 j 是较小的索引。
exch(a, lo, j);
return j;
}
快排
private void fastSort(Comparable[] a, int lo, int hi) {
if(lo >= hi) return;
int i = partition(a, lo, hi);
fastSort(a, lo, i - 1);
fastSort(a, i + 1, hi);
}
拷贝子数组,左闭右开
Arrays.copyOfRange(arr, from, to);
应用:所有有排序分组需求的题目 39,40,45
网友评论