为什么这个二进制搜索代码没有任何输出



我有一些代码应该在list上进行二进制搜索。执行代码,但不返回任何内容。我逐字逐句地从书上抄了这个。我不知道是pycharm还是代码错误。你能帮忙吗?

def binarySearch(aList, item):
start = 0
end = len(aList) - 1
index = -1
found = False
while start <= end and found:
mid = (start + end) / 2
if aList[mid] == item:
found = True
index = mid
print("index at " + str(index))
return index
elif aList[mid] < item:
start = mid + 1
else:
end = mid - 1
return index
nums = [1, 4, 6, 27, 35, 36, 52, 60, 72, 80]
num = 35
binarySearch(nums, num)

有一些错误/改进:

  1. 您的found变量是多余的(在注释中提到(
  2. 您需要整数除法("//"而不是"/"(
  3. 删除while循环末尾的return语句
  4. 不需要有index变量,如果没有找到,最后只返回-1

因此,固定版本为:

def binarySearch(aList, item):
start = 0
end = len(aList) - 1
while start <= end:
mid = (start + end) // 2
if aList[mid] == item:
return mid
elif aList[mid] < item:
start = mid + 1
else:
end = mid - 1
return -1
nums = [1, 4, 6, 27, 35, 36, 52, 60, 72, 80]
num = 35
print(binarySearch(nums, num))

首先,您的返回位于while循环中,因此不返回任何内容。

在修复后,您仍然会返回您所处的默认索引值(-1(,这是因为您从未进入循环,因为找到的值最初是"0";错误";。

修复后仍然会出现错误,但这一次更容易理解,即列表索引必须是整数或切片,而不是浮点。这是因为您的mid可以是浮点值。要修复此问题,请将其封装在int((中。

最后,你的代码应该看起来像这个

def binarySearch(aList, item):
start = 0
end = len(aList) - 1
index = -1
found = False
while start <= end and not found:
mid = int((start + end) / 2)
if aList[mid] == item:
found = True
index = mid
print("index at " + str(index))
return index
elif aList[mid] < item:
start = mid + 1
else:
end = mid - 1
return index
nums = [1, 4, 6, 27, 35, 36, 52, 60, 72, 80]
num = 35
print(binarySearch(nums, num))

最新更新