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

Python二分查找为何使用mid=(high+low)//2而非mid=high//2

二分查找mid计算方式问题解答

二分查找的核心逻辑是每次动态缩小搜索区间,你当前的搜索范围是[low, high]这个闭区间,不是永远从数组首地址开始的,这是两种写法本质区别的来源。

为什么mid = high // 2是错的

  • 只有第一次循环时low=0,这时候(low+high)//2和high//2的结果确实一致,但只要你进入下一轮循环,low就会因为排除左半区间而大于0,此时high//2计算出来的索引根本不在你当前的有效搜索区间内,完全没有参考价值。
  • 拿你给出的测试代码举例,假设我们要找的值是40:
    1. 第一次循环:low=0,high=4,两种写法算出来的mid都是2,判断后发现arr[2]=4 < 40,需要排除左半区间,low更新为3
    2. 进入第二轮循环,此时有效搜索区间是[3,4],如果用high//2,算出来的mid是4//2=2,这个索引已经被我们排除在搜索范围外了,继续判断会进入死循环,永远找不到结果;而用(low+high)//2算出来的mid是(3+4)//2=3,刚好在有效区间内,能继续缩小搜索范围直到找到值。

为什么mid = (low + high) // 2是对的

这个写法的本质是计算任意闭区间[low, high]的中间索引,不管这个区间落在整个数组的哪个位置,都能得到区间内的中间位置,保证每次都能排除一半的搜索范围,符合二分查找的核心逻辑。

小扩展:其他有整数溢出限制的语言(比如C、Java)里,更推荐写mid = low + (high - low) // 2,避免low和high相加时超出整数最大长度溢出,Python的整数支持大数,所以不用考虑这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:45:04