为何我的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
相关产品推荐
相关产品推荐

