Java快速排序为什么一定要从右边开始

这几天在复习排序的知识,又到了快排这个地方

当时学习算法的时候,由于个人代码风格原因喜欢先处理i(左边开始),踩到了这个坑

时隔一年还记得这个坑,查了查网上说的感觉都不是那么容易理解

记一下 方便以后看

首先快排这个事不用说,两个哨兵,分别标记,然后交换,重点和坑在最后一步

也就是基准数(一般是数据中第一个数)和它本身所在的位置的数交换的时候会可能出现问题

我们快排的规则是小于基准数的数放左边,大于基准数的数放右边

然后是以这个基准数分界

但如果我们从左边开始,最后确定这个基准数位置的时候

要注意这个基准数本应该放的位置的目前的数(也就是要和基准数交换的数)一定是比基准数要小的

不然咋能被换到左边呢

而左边的哨兵先走,他不会标记比基准数小的数,他会错过应该交换的数继续向前走

反而还阻止了右边来的哨兵找到正确的位置,最后会找到一个比基准数大的数交换

这就会发生错误,这一轮的快排就失败了

而右边的哨兵先走就可以正确的找到位置了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值