我运行带有函数的while循环,以检查变量i是否高于列表的len。我将其放置在此处作为停止循环的一种方法,但它不会对其进行检查。由于它本身并没有结束,所以我必须在其中放置一个if条件,该条件返回false。
def binarySearch(numberlist, number):
first = 0
last = len(numberlist)-1
found = False
i=0
while found == False or i <= len(numberlist):
i = i + 1
mid = (first + last) // 2
print(numberlist[mid])
if i > len(numberlist)+1:
return False
if mid < first or mid > last or mid < 0:
return False
if number == numberlist[mid] or number == numberlist[first] or number == numberlist[last] :
return True
elif number < numberlist[mid]:
last = mid
elif number > numberlist[mid]:
first = mid
return False
答案 0 :(得分:1)
错误在于以下几行。
elif number < numberlist[mid]:
last = mid
elif number > numberlist[mid]:
first = mid
考虑以下情况:我们正在寻找不在列表中的编号。
指针first
,last
和mid
最终将全部收敛到某个索引。在那种情况下,最后两个条件之一将是True
,但是由于所有三个值已经相等,因此指针不再更新,并且我们进入无限循环。
为确保不会发生这种情况,我们必须通过将first
设置为mid + 1
或将last
设置为{{ 1}},具体取决于条件。如果mid - 1
大于first
,我们就可以停止循环。
last