给自己定下快速排序以后的写法

快速排序自己的标准写法

public static void quickSort(int[] arr, int low, int high) {
        // low,high 为每次处理数组时的首、尾元素索引

        // 当low==high是表示该序列只有一个元素,不必排序了
        if (low >= high) {
            return;
        }
        // 选出哨兵元素和基准元素。这里左边的哨兵元素也是基准元素
        int i = low, j = high, base = arr[low];
        while (i < j) {
            // 右边哨兵从后向前找
            while (arr[j] >= base && i < j) {
                j--;
            }
            // 左边哨兵从前向后找
            while (arr[i] <= base && i < j) {
                i++;
            }
            swap(arr, i, j); // 交换元素
        }
        swap(arr, low, j); // 基准元素与右哨兵交换

        // 递归调用,排序左子集合和右子集合
        quickSort(arr, low, j - 1);
        quickSort(arr, j + 1, high);

    }

    private static void swap(int[] arr, int i, int j) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }

获取基准元素的位置的时候,先从右哨兵节点开始,再从左哨兵节点开始,退出循环后将基准元素和右哨兵节点交换位置,此时基准元素就位。

你可能感兴趣的:(给自己定下快速排序以后的写法)