【唐老狮】排序——快速排序
作者:互联网
【快速排序】
【基本原理】
选取基准
产生左右标识
左右比基准
满足则换位
排完一次
基准定位
左右递归
直到有序
图解
原数组
一般选取第一个元素作为基准
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相等
基准值定位
放到该位置
到此一轮排序结束
接着以同样的流程对
数组两侧继续排序
直到坐标是大于等于右标识
停止
最终结果
上动图
【关键逻辑】
声明快速排序函数名
有递归
用函数
递归函数结束条件
基准值
左右游标
核心交换逻辑
左右递归继续排序
【标准实现】
【逻辑分析】
通过上面的图解和逻辑注释,快速排序的原理显而易见了,不太需要再做过多的分析讲解。
-快速排序,归并排序,两者很像-
相同点:
-
他们都会用到递归
-
把数组分成几部分
不同点:
-
归并排序是递归分拆分数组后再进行排序,递归走到头再排序;快速排序是边排边拆分,排了一轮排下一轮,走到头就排序结束了。
-
归并排序在递归中会不停产生新的数组用于合并;快速排序一直是在改变原数组,不会产生新数组。
-如何降序排列-
右游标不停左移:目前的逻辑是如果右边的数大于基准值,游标左移,意思是小的才会停下来往左边放
左游标不停右移:目前的逻辑是如果左边的数小于基准值,游标右移,意思是大的才会停下来往右边放
降序排列
改比较规则即可
【练习】
快速排序的写法也不是固定的,基于它的原理有很多种写法。如果你理解了它的基本原理,可以进行练习,尝试用2到3种方法实现快速排序。
【总结】
-基本原理-
选取基准
产生左右标识
左右比基准
满足则换位
升序时
小的放左边
大的放右边
降序时反之
排完一次
基准定位
基准左右递归
直到有序
-套路写法-
基准值变量
左右游标记录
3层while循环
游标不停左右移动
重合则结束
结束定基准
递归排左右
错位则结束
-注意事项-
左右互放
while循环外定基准
关注唐老狮获取更多干货内容
标签:递归,基准值,基准,游标,数组,排序,快速,唐老狮 来源: https://blog.csdn.net/MrTang_Unity/article/details/122187640