You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

期中复习:多中点二分查找的困惑及具体搜索问题

兄弟,我帮你把这个二分查找的流程理得明明白白的,你刚才中间计算mid的时候应该是手滑写错了,咱们一步步拆解整个过程(前提是你的数组是升序有序的,这是二分查找的核心前提哦):

二分查找完整推演(目标值150,数组下标范围0-15)
  • 初始状态:

    • 搜索起始下标 start=0,结束下标 end=15
    • 目标搜索值 target=150
  • 第一次迭代:

    • 计算中间下标:mid = (0 + 15) // 2 = 7(用整数除法避免浮点数,符合数组下标要求)
    • 下标7对应的值为90,由于 90 < 150,说明目标值在右半区间,更新搜索范围:start = mid + 1 = 8,end=15
  • 第二次迭代:

    • 计算中间下标:mid = (8 + 15) // 2 = 11(这里你之前写的1是笔误啦,8+15=23,整数除以2是11)
    • 假设下标11对应的值为130(如果实际数组值不同,逻辑同理),由于 130 < 150,继续缩小到右半区间:start = 12,end=15
  • 第三次迭代:

    • 计算中间下标:mid = (12 + 15) // 2 = 13
    • 假设下标13对应的值为160,由于 160 > 150,说明目标值在左半区间,更新搜索范围:start=12,end=12
  • 第四次迭代:

    • 计算中间下标:mid = (12 + 12) // 2 = 12
    • 此时检查下标12对应的值:
      • 如果等于150:恭喜,找到目标值,下标为12
      • 如果不等于150:说明数组中不存在目标值150,查找结束

几个关键注意点

  • 二分查找必须基于有序数组,否则无法通过中间值的大小判断目标区间
  • 计算mid的最佳实践是用 start + (end - start) // 2,而不是直接(start+end)//2——这能避免当start和end数值很大时出现整数溢出的问题(Python里整数无溢出限制,但这是通用的行业规范)
  • 每次更新start或end时,一定要记得+1或-1,否则可能陷入死循环(比如当start和end相邻时)

内容的提问来源于stack exchange,提问作者whatthink12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:19:19