美文网首页
partition() 与快排

partition() 与快排

作者: 一方乌鸦 | 来源:发表于2020-05-07 09:40 被阅读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

    相关文章

      网友评论

          本文标题:partition() 与快排

          本文链接:https://www.haomeiwen.com/subject/omsuvhtx.html