快速排序【2023年最新】

编程入门 行业动态 更新时间:2024-10-27 17:20:58

<a href=https://www.elefans.com/category/jswz/34/1771431.html style=快速排序【2023年最新】"/>

快速排序【2023年最新】

快速排序思想总结:

内附快排模版,可开袋即食。

学了一套快速排序的模版,接下来我说一下我的理解。

这套模板的思路是这样的,随机找到一个点,可以是数组中的左边界也可以是右边界,或者是数组中任何一个元素,为了方便计算和理解,这里将这个点设为左边界,并且叫做pivot。然后,去比较右边界和左边界的大小,先看右边界的值是否大于pivot的值,如果大于,则右边界一直往左走,当右边界的值小于pivot,则将右边界此时的值赋值给左边界。然后轮到左边界了,左边界也要比较和pivot的值的大小,如果小于pivot则一直往右走,如果大于,则将左边界的值赋值给右边界。循环这个操作,循环条件是左边界的指针大于右边界的指针。如果左边界的指针大于或者等于右边界的指针,就将此时的指针所指的值换成pivot。可以发现,我们第一趟函数走完,我们把大于pivot的放在pivot的右边,小于pivot的放在pivot的左边。此时很有可能pivot的左边或者右边还不是有序的,所以我们要继续递归执行这个函数,继续去排序pivot的左边和右边,文章的快排模版差不多是这个意思。

    public static void quickSort(int[] n,int start,int end){if(start>end) return;int left = start,right = end;int pivot = n[left];while(left<right){while(left<right&&n[right]>=pivot){right--;}if(left<right){n[left] = n[right];}while(left<right&&n[left]<=pivot){left++;}if(left<right){n[right] = n[left];}if(left>=right){n[left] = pivot;}}quickSort(n,start,right-1);quickSort(n,right+1,end);}

更多推荐

快速排序【2023年最新】

本文发布于:2023-11-15 19:30:01,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1605056.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:快速   最新

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!