ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【唐老狮】排序——快速排序

2021-12-28 11:31:32  阅读:187  来源: 互联网

标签:递归 基准值 基准 游标 数组 排序 快速 唐老狮


【快速排序】


【基本原理】

选取基准

产生左右标识

左右比基准

满足则换位

排完一次

基准定位

左右递归

直到有序

图解

原数组

 

一般选取第一个元素作为基准

5为基准值

认为5现在的位置为空

用右侧元素3和5进行比较

3小于5放左边(左空位)

把3放到5的位置

left++

 

3的位置可以认为空出来了

用左侧元素6和5进行比较

6大于5放右边(右空位)

把6放到刚才3的位置

right--

 

6的位置可以认为空出来了

用右侧元素9和5进行比较

9大于5放右边

不动

right继续--

 

用右侧元素2和5进行比较

2小于5放左侧(左空位)

把2放到刚才6的位置

left++

 

left和right相等

基准值定位

放到该位置

 

到此一轮排序结束

接着以同样的流程对

数组两侧继续排序

直到坐标是大于等于右标识

停止

 

 

最终结果

 

上动图

 


【关键逻辑】

声明快速排序函数名

有递归

用函数

 

递归函数结束条件

 

基准值

左右游标

 

核心交换逻辑

 

左右递归继续排序

 


【标准实现】

 


【逻辑分析】

通过上面的图解和逻辑注释,快速排序的原理显而易见了,不太需要再做过多的分析讲解。

-快速排序,归并排序,两者很像-

相同点:

  1. 他们都会用到递归

  2. 把数组分成几部分

不同点:

  1. 归并排序是递归分拆分数组后再进行排序,递归走到头再排序;快速排序是边排边拆分,排了一轮排下一轮,走到头就排序结束了。

  2. 归并排序在递归中会不停产生新的数组用于合并;快速排序一直是在改变原数组,不会产生新数组。

-如何降序排列-

 

右游标不停左移:目前的逻辑是如果右边的数大于基准值,游标左移,意思是小的才会停下来往左边放

左游标不停右移:目前的逻辑是如果左边的数小于基准值,游标右移,意思是大的才会停下来往右边放

降序排列

改比较规则即可

 


【练习】

快速排序的写法也不是固定的,基于它的原理有很多种写法。如果你理解了它的基本原理,可以进行练习,尝试用2到3种方法实现快速排序。


【总结】
 

-基本原理-

选取基准

产生左右标识

左右比基准

满足则换位

升序时

小的放左边

大的放右边

降序时反之

排完一次

基准定位

基准左右递归

直到有序

-套路写法-

基准值变量

左右游标记录

3层while循环

游标不停左右移动

重合则结束

结束定基准

递归排左右

错位则结束

-注意事项-

左右互放

while循环外定基准


关注唐老狮获取更多干货内容

 

标签:递归,基准值,基准,游标,数组,排序,快速,唐老狮
来源: https://blog.csdn.net/MrTang_Unity/article/details/122187640

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有