快排实现

 public static void quickSort(int[] arr, int left, int right) {
        //如果数组只有一个元素,就不用排序了,直接返回
        if (left >= right)
            return;
        int[] index = partion(arr, left, right);
        quickSort(arr, left, index[0]);
        quickSort(arr, index[1], right);
    }

    public static int[] partion(int[] arr, int left, int right) {
        int temp = arr[left];
        int i = left - 1, j = right + 1;
        int cur = left;
        //如果当前值大于等于右边界说明所有数字都被遍历完了,循环结束
        while (cur < j) {
            //如果当前值小于选择的分界值,将当前值和左边界的下一个数交换,左边界向右扩一位,cur从左边界后一位开始,继续循环
            if (arr[cur] < temp) {
                int a = arr[i + 1];
                arr[i + 1] = arr[cur];
                arr[cur] = a;
                i++;
                cur = i + 1;
                continue;
            }
            //如果当前值大于分界值,将当前值和右边界的前一位交换,当前值不变继续循环
            if (arr[cur] > temp) {
                int a = arr[j - 1];
                arr[j - 1] = arr[cur];
                arr[cur] = a;
                j--;
                continue;
            }
            //如果当前值和分界值相等,cur++继续循环
            if (arr[cur] == temp) {
                cur++;
            }
        }
        return new int[]{i, j};
    }

 

你可能感兴趣的:(快排实现)