排序算法——快速排序

快速排序

快速排序的指导思想:分治法
原理:一个数组: 43、29、71、99、78、19、24、45首先我们需要在数列中选择一个基准数,我们一般会选择中间的一个数或者头尾的数,这里直接选择第 1 个数 43 作为基准数,接着把比 43 小的数字移动到左边,把比 43 大的数字移动到右边,对于相等的数字不做移动。所以实际上我们需要找到中间的某个位置 k,这样 k 左边的值全部比 k 上的值小,k 右边的值全部比 k 上的值大
首先从数列的右边开始往左边找,我们设这个下标为 j,也就是进行减减操作(j–),找到第 1 个比基准数小的值,让它与基准值交换;接着从左边开始往右边找,设这个下标为 i,然后执行加加操作(i++),找到第 1 个比基准数大的值,让它与基准值交换;然后继续寻找,直到 i 与 j 相遇时结束,最后基准值所在的位置即 k 的位置,也就是说 k 左边的值均比 k 上的值小,而 k 右边的值都比 k 上的值大。

比如:数组:43、29、71、99、78、19、24、45,基数选43 i的起始位置为1 j的起始位置是7

  1. 从右侧开始遍历,j–,直到找到比43小的数字,24,交换基数和24的位置 此时j:6数组:24、29、71、99、78、19、43、45
  2. 然后从左侧遍历,i++,直到找到比43大的数字,71,交换位置,此时i:2数组:24、29、43、99、78、19、71、45
  3. 然后再从右侧继续遍历,j–,直到找到比43小的数字,19,此时j:5 数组:24、29、19、99、78、43、71、45
  4. 然后再从左侧继续遍历,i++,直到找到比43大的数字,99,此时i:3 数组:24、29、19、43、78、99、71、45
  5. 然后再从右侧继续遍历,j–,发现当j=5时和j=4时,分别为78和43都不符合交换位置,然后j=3,发现此时j=i,此时就可以结束第一轮的遍历了。

此时的数组:24、29、19、43、78、99、71、45,此时基数43左侧的都比43右侧的小,然后再以43为分水岭分两个数组
24、29、19、43和78、99、71、45 然后再分别按照上面的方式遍历排序,然后再分,直到最后有序。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值