啊哈C快速排序, 为什么必需从右边开始扫描

(关于这个问题的前提: 算法是要实现"从小到大"的升序排列, 因此, 是把左边的较大数与右边的较小数进行交换 )

 

从左边开始的扫描, 其目标是找到第一个比基准值大的数, 然后与比基准值小的数进行交换
同时有个条件, 需要这个较大的家伙是在比基准值小的数之前, 也就是较小数的左边
否则就失去"左大"和"右小"交换的机会了

因此, 这种情况下, 必须先从右向左找到第一个小于基准数的"右小"

 

如果算法一开始是从左边开始扫描, 其获得的第一个超重数, 可能是在右起第一个较小数的右边了, 从这时起算法就失败了

 

可以看出, 被交换的对象, 总是当前区间内的极左超重与极右超轻, (如前, 这个极左超重必须位于极右超轻的左侧)
接下来会对处于两者中间的剩余区间进行同样的处理, 这样一个回合下来, 本区间汇合点左边都是超轻, 右边都是超重了

 

现在区间被两分了, 汇合点的两侧各有一个待排区间

分别对这两个区间进行"快速排序", 从而不断的两分, 不断的交换极左重和极右轻

 

极右轻左侧有没有极左重? 有的话与极右轻交换
这是本算法的核心

不断缩小的处理区间, 是其高效率的根本原因

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值