算法学习之快速排序

参考https://www.runoob.com/w3cnote/quick-sort.html

快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。
该方法的基本思想是

  1. 先从数列中取出一个数作为基准
  2. 将比这个数大的放到右边,小的都放到左边
  3. 重复1,2步,直到各个区间最终只剩下一个数

以一个数组作为示例,取区间第一个数为基准数。

0123456789
7265788604283734885

初始时,i = 0; j = 9; X = a[i] = 72
由于已经将a[0]中的数保存到了X中,可以理解成在a[0]上面挖了个坑,可以将其他数据填充到这里来。

从j开始向前找一个比x小或者等于x的数,当j=8,发现符合要求。将a[8]挖出来再填到上一个坑a[0]中。
a[0] = a[8]; i++
这样第一个坑a[0]就被搞定了,但是又形成了一个新坑a[8],因此需要再找一个数字填充这个坑,这次从i开始向后找一个大于X的树,i=3的时候符合要求,将a[3]挖出来再填到坑a[8]中,j–;

数组变成了

0123456789
4865788604283738885

i = 3; j = 7; X=72

再次重复上面的步骤,直到最后,可以得到

0123456789
4865742607283738885

第一趟结束,可以看出a[5]前面的数字都小于它,a[5]后面的数字都大于它。接下来再对a[0…4]和a[6…9]这二个子区间重复上述步骤就可以了。

对快速排序进行总结

  1. i = L; j = R,将基准数挖出形成第一个坑a[i]
  2. j–,从后向前找到比他小的数,找到后挖出此数,田中到前一个坑a[i]中。
  3. i++,从前向后找比他大的数,找到后也挖出这个数填到前一个坑a[j]中。
  4. 再次重复2,3步,直到 i==j,将基准数填到该位置。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值