partition() 与快排

2020-05-07  本文已影响0人  一方乌鸦

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

上一篇 下一篇

猜你喜欢

热点阅读