3-8 三路快速排序法

来源:互联网 发布:nginx访问php变成下载 编辑:程序博客网 时间:2024/05/31 19:39

三路快排在双路快排的基础之上,把与标定点元素等值的元素排在了数组的中间位置。

比较从第 1 版的快速排序,到两个优化,再到指针对撞的快速排序,在到三路快速排序,它们在思路上的变化。

三路快速排序的思路展示:

代码实现:

/** * 三路快速排序 * Created by liwei on 17/6/8. */public class QuickSortTest03 {    @Test    public void test03() {        int[] arr = ArrayUtil.generateRandomArray(1000000,1,1000000000);        quickSort3Ways(arr, 0, arr.length - 1);        System.out.println(ArrayUtil.judgeArraySorted(arr));    }    /**     * @param arr     * @param left     * @param right     */    private void quickSort3Ways(int[] arr, int left, int right) {        if (left >= right) {            return;        }        int v = arr[left];        int lt = left;        int gt = right + 1;        int i = left + 1;        while (i < gt) {            if (arr[i] < v) {                swap(arr, lt + 1, i);                i++;                lt++;            } else if (arr[i] > v) {                swap(arr, gt - 1, i);                gt--;            } else { // arr[i]==v                i++;            }        }        swap(arr, left, lt);        quickSort3Ways(arr, left, lt - 1);        quickSort3Ways(arr, gt, right);    }    private void swap(int[] arr, int index1, int index2) {        int temp = arr[index1];        arr[index1] = arr[index2];        arr[index2] = temp;    }}
原创粉丝点击