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

为何我的Python二分查找算法无法找到部分元素?

二分查找代码的错误分析与修正

你的代码存在两个关键问题,导致部分元素无法被找到:

1. 循环条件遗漏边界重合场景

原循环条件while not found and lowerBound != upperBound会在左右边界重合时直接终止循环,但此时重合位置的元素可能就是目标元素(比如67、94这类最终会收敛到边界重合的元素),导致完全没机会检查该位置。

2. 并列if存在逻辑冗余

当找到目标元素后,后续的item > myList[index]和item < myList[index]判断属于多余执行,改成elif结构能让逻辑更严谨。

修正后的代码

myList = [1,3,4,7,12,13,14,16,19,20,28,29,40,45,48,50,67,89,91,94]

item = 67
found = False
lowerBound = 0
upperBound = len(myList) - 1
index = 0

# 修改循环条件,覆盖边界重合的情况
while not found and lowerBound <= upperBound:
    index = (upperBound + lowerBound) // 2
    if item == myList[index]:
        found = True
    elif item > myList[index]:
        lowerBound = index + 1
    else:
        upperBound = index - 1

if found:
    print('Item found')
else:
    print('Item not found')

元素可找到/不可找到的规律原因

那些能被找到的元素(比如91、89),会在lowerBound != upperBound的循环阶段就命中目标,触发found=True退出循环,不会触发边界重合的问题。而像67、94这类元素,需要收敛到lowerBound == upperBound时才会命中,原代码的循环条件直接跳过了这个检查,所以找不到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:10:31