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

【快速排序】


【基本原理】

选取基准

产生左右标识

左右比基准

满足则换位

排完一次

基准定位

左右递归

直到有序

图解

原数组

 

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

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循环外定基准


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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值