关于快速排序左右索引的先后问题

本文讨论了快速排序中基准数选择对哨兵索引的影响,指出从左或右开始可能导致定位错误,建议根据基准数位置调整哨兵搜索策略,确保正确划分区间。
摘要由CSDN通过智能技术生成

快速排序的基准数如果从左开始,则左右哨兵索引要从右先出发,因为如果有10个数,基准数左右小于与大于基准数的有9个,但我们是从数组的第一位找的基准数,相当于基准数是占了一个左哨兵查找位,所以一定要从右哨兵开始查找,否则左哨兵会多找一次越过基准位

比如 6 10 9 8 7 5 4 3 2 1 如果6是基准位,则6的正确位置是在5的位置上

6  10 9 8 7 5 4 3 2  1

 i                              j

>>>>

6 1 2 3  4  5  7  8 9 10

              i       j 

>>>>

6 1 2 3 4 5  7  8 9 10

                   ij                (定位错误)

如果我们让左哨兵索引i先出发,10-1换,9-2换,8-3换,7-4换,现在左右哨兵都到了6的正确位置左右,但是我们是让i先出发的,i哨兵会跳过5直接与j哨兵会师,导致错误

我们想一下,因为基准数占领了一个比基准数小的一个数的位置,所以当i哨兵和j哨兵最终换到基准数的正确位置的左右时候,一定会有一个小于基准位数字的数占领着基准数的位置,所以如果让左哨兵i先出发,则到最后一次一定是i哨兵先手,就会导致基准数定位错误,我们反过来想也是一样,基准数如果在右,则基准数会占领一个比基准数大的一个数的位置,则到最后定位基准数的时候,我们如果让右哨兵j先手,则也会导致定位错误的问题

然而如果左基准数右哨兵索引先手或右基准数左哨兵索引先手就不会有这个问题,因为占领基准数正确位置的数一定满足右哨兵或左哨兵停止巡航的条件

个人见解,如果有不准确还请大佬指正

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值