快排

120 阅读1分钟
private void sort(Integer[] sums, int begin, int end) {

        if (end - begin <= 1) {
            return;
        }

        int watch = sums[begin];

        //第一次排序
        //定义两个游标,左右同步,遇到大于或者小于则切换游标,直到相等
        //current 标识被替换的位置
        int i = begin;
        int j = end;

        while (true) {
            //右侧游标移动
            while (j > i && sums[j] > watch) {
                j--;
            }

            sums[i] = sums[j];

            //左侧游标移动
            while (i < j && sums[i] < watch) {
                i++;
            }

            sums[j] = sums[i];

            if (i == j) {
                sums[i] = watch;
                break;
            }
        }


        //第二次 二分排序
        sort(sums, begin, i - 1);
        //第三次 二分排序
        sort(sums, i + 1, end);

    }

    @Test
    public void sortTest() {
        Integer[] sums = new Integer[]{4, 6, 7, 3, 9, 1, 2, 11};
        sort(sums, 0, sums.length - 1);
        System.out.println(Arrays.toString(sums));
    }
    ```