快速排序

核心思想找一个轴点元素,备份轴点元素,先从右往左找,end--操作。一旦不满足大小条件,则将右侧的数值放置到开始位置,然后开始位置进行++,向右侧找进行循环往复

public static void main(String[] args) {
        int ary[] = {6, 8, 8, 6, 2, 5, 9, 3, 7};
        quickSort(ary);
        System.out.println(JSON.toJSONString(ary));
    }

    private static void quickSort(int[] ary) {
        quickSort(ary, 0, ary.length - 1);
    }

    private static void quickSort(int[] ary, int begin, int end) {
        if (end - begin < 2) return;
        int mid = getMid(ary, begin, end);
        quickSort(ary, begin, mid);
        quickSort(ary, mid + 1, end);
    }

    private static int getMid(int[] ary, int begin, int end) {
        int tmp = ary[begin];

        for (; begin < end; ) {

            for (; begin < end; ) {
                //从右往左检查
                if (tmp < ary[end]) {
                    end--;
                } else {//大于等于
                    ary[begin++] = ary[end];
                    break;
                }
            }

            for (; begin < end; ) {
                //从左往右检查
                if (tmp > ary[begin]) {
                    begin++;
                } else {
                    ary[end--] = ary[begin];
                    break;
                }
            }

        }

        ary[begin] = tmp;
        return begin;
    }
原文地址:https://www.cnblogs.com/zzq-include/p/13857009.html