手把手教你写出正确的二分搜索!

写出正确的二分搜索知易行难,原理好像都懂,但是实际上手就出各种错误,例如如何确定循环终止条件、区间搜小判断条件等。这里就手把手教你写出正确的二分检索!

二分法共有下面7种变式。

①是否存在数字t                                   ——返回下标或者-1

②找到大于t的第一个数                        ——返回下标或者-1

③找到大于等于t的第一个数                 ——返回下标或者-1

④找到小于t的最后一个数                     ——返回下标或者-1

⑤找到小于等于t的最后一个数              ——返回下标或者-1

⑥是否存在数字t,返回 第一个t            ——返回下标或者-1

⑦是否存在数字t,返回 最后一个t        ——返回下标或者-1

首先说一点个人思考,情况1(查找target位置)完全就是抖了个机灵,用情况1来当作二分查找的基本情况是非常非常错误的,从情况1完全不能推导出其他情况下二分查找该如何写。看了很多篇博客,没有一篇兼顾了正确性证明和归纳性。下面是我阅读过《Elements of programming》了解二分法原理后,自己扩展出的二分法各种变式。每一种情况都有正确性证明,且条件归纳统一,归纳性强,很好理解。

一、二分法的适用条件—

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值