快速排序

别来无恙 提交于 2020-03-04 01:49:33

快速排序

快速排序就是在待排序数组选取一个基准值,把比基准值大的元素放在右边,小的元素放在左边,然后递归的去对左边和右边执行相同操作。

 public static void quickSort(int[] arr, int left, int right){
        int l = left;
        int r = right;
        int pivot = arr[(left + right) / 2];    // 基准值

        while (l < r){

            // 当左边的值小于基准值时,向右移动
            while (arr[l] < pivot)
                l++;
            // 当右边的值大于基准值时,向左移动
            while (arr[r] > pivot)
                r--;

            // 左边的已经小于等于基准值,右边的已经大于等于基准值
            if (l > r)
                break;
            // 交换
            swap(arr,l,r);
            // 交换后左边的值等于基准值,继续向右移动
            if (arr[l] == pivot)
                l++;
            // 交换后右边的值等于基准值,向左移动
            if (arr[r] == pivot)
                r--;
//            System.out.println("第一轮");
//            System.out.println(Arrays.toString(arr));
        }
        // 左递归
        if (left < r)
            quickSort(arr, left, r);
        // 右递归
        if (right > l)
            quickSort(arr,l,right);
    }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!