只有1、2、3的数组,进行排序

一个数组,只有1、2、3三种数,如何排序?

桶排序的思维,需要遍历2次,但是如何1次就行呢?

 

这个题的思维只能顺其自然

因为我们只能依靠一边来 定位一个数,一共只有两边,只能 定位两个数,因为中间留着用来遍历,不能写死。

 

为了 加深对这一点的认识,假设一个数组只有1、2,我们该怎么做呢?

第一位、最后一位作为两个哨兵,让左边尽量为1,碰到2的时候,停止,从后面开始遍历,保持后面一直为2,找到第一个1,可能要和第一个哨兵停在的地方交换。。。直到两个哨兵相遇。

 

3个数,不管怎么样,先定位3在最右边总没错!

从右边开始遍历,希望右边都是3,一旦发现一个不是3的数,也就是1或者2,从左边开始遍历。左边我也当然希望全部是1,一旦发现3,立马就可以替换,但是如果是2呢?那就再开一个指针。其实到这里可能有点疑问,这样怎么保持只能遍历一次呢?不管,先再跑跑试试!发现是1,那就和上一个指针交换,如果是3,直接和后一个指针交换。如果是2,那就这样下去,如果是1,那就和上一个指针交换即可。

这个解决方案的思想在于中间第二段的头和尾是可变换的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值