编程语言   发布时间:2022-06-22  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了快速排序模版大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

记录一下快速排序的模版,快排有很多种写法,记一种理解的模版就可以了。 

    public void quickSort(int[] nums, int left, int right) {
        if (left >= right) {
            return;
        }

        int pivot = nums[left];
        int i = left - 1, j = right + 1;
        while (i < j) {
            // 这两个while循环的顺序可以交换,顺序不重要
            while (nums[--j] > pivot) {
            }
            while (nums[++i] < pivot) {
            }
            if (i < j) {
                swap(nums, i, j);
            }
        }
        // 关键点是怎么切分,当退出循环后
        // nums[j]左边的数都小于pivot,nums[i]右边的数都大于pivot
        // 而i和j的关系有两种,要么i=j,要么i=j+1
        // 所以切分时可以用[left,i-1][i,rigjt],和[left,j][j+1,right]这两种
        // 而我们选取的pivot是最左边的数,当pivot一开始就处于正确的位置,即此时i=left时
        // 这时按[left,i-1][i,rigjt]切分就会出现死循环,第二段区间依然是[left, right]
        // 故当我们选取left为pivot时,需要用[left,j][j+1,right]来切分
        // 同理,当我们选取最后一个值为pivot时,需要用i来切分,防止j的位置不变,导致死循环
        quickSort(nums, left, j);
        quickSort(nums, j + 1, right);
    }

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

 

大佬总结

以上是大佬教程为你收集整理的快速排序模版全部内容,希望文章能够帮你解决快速排序模版所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。