【快速排序】
【基本原理】
选取基准
产生左右标识
左右比基准
满足则换位
排完一次
基准定位
左右递归
直到有序
图解
原数组

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

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循环外定基准
关注唐老狮获取更多干货内容

本文深入解析快速排序的基本原理和实现逻辑,通过图解展示排序过程。快速排序使用选取基准、左右标识及比较交换的方式进行排序,递归进行直至数组有序。与归并排序对比,快速排序在原地排序,效率更高。文章还介绍了如何调整逻辑实现降序排列,并提供了练习机会。
1486

被折叠的 条评论
为什么被折叠?



