Python:二进制搜索代码未按预期工作
Python: Binary Search Code not working as intended
这是我的代码:
array = [14, 17, 25, 26, 56, 59, 78, 90, 99, 104]
low = 1
high = len(array)
found = False
item = int(input('Henlo, giv number pls :)\n'))
while high >= low and found == False:
middle = int((low + high) / 2)
if item < array[middle]:
high = middle - 1
elif item == array[middle]:
found = True
else:
low = middle + 1
if found == True:
print('Found')
else:
print('Not Found')
它有效,但每当我尝试搜索数组中的第一项(无论是 14 还是任何其他数字,只要整个数组按升序排列),它 returns 'Not Found.' 它适用于所有其他数字,如果我放入一个不在数组中的数字,它会像预期的那样显示 'Not Found' ,除非该数字大于数组中的最后一个数字, 例如 105, 然后它给出列表索引超出范围的错误, 这个问题的解决方案也会有所帮助。
谢谢:)
您需要调整数组限制。
array = [14, 17, 25, 26, 56, 59, 78, 90, 99, 104]
print(array)
low = 0 # minimum index in array
high = len(array)-1 # maximum index in array
found = False
item = int(input('Henlo, giv number pls :)\n'))
while high >= low and found == False:
middle = int((low + high) / 2)
if item < array[middle]:
high = middle - 1
elif item == array[middle]:
found = True
else:
low = middle + 1
if found == True:
print('Found')
else:
print('Not Found')
这实际上是一个快速修复。
数组的索引从 0 而不是 1 开始,因此您只需要设置 low = 0
而不是 1 并更改 high = len(array) -1
因为数组的长度从 1 而不是 0 开始计算;因此 - 1
这是我的代码:
array = [14, 17, 25, 26, 56, 59, 78, 90, 99, 104]
low = 1
high = len(array)
found = False
item = int(input('Henlo, giv number pls :)\n'))
while high >= low and found == False:
middle = int((low + high) / 2)
if item < array[middle]:
high = middle - 1
elif item == array[middle]:
found = True
else:
low = middle + 1
if found == True:
print('Found')
else:
print('Not Found')
它有效,但每当我尝试搜索数组中的第一项(无论是 14 还是任何其他数字,只要整个数组按升序排列),它 returns 'Not Found.' 它适用于所有其他数字,如果我放入一个不在数组中的数字,它会像预期的那样显示 'Not Found' ,除非该数字大于数组中的最后一个数字, 例如 105, 然后它给出列表索引超出范围的错误, 这个问题的解决方案也会有所帮助。
谢谢:)
您需要调整数组限制。
array = [14, 17, 25, 26, 56, 59, 78, 90, 99, 104]
print(array)
low = 0 # minimum index in array
high = len(array)-1 # maximum index in array
found = False
item = int(input('Henlo, giv number pls :)\n'))
while high >= low and found == False:
middle = int((low + high) / 2)
if item < array[middle]:
high = middle - 1
elif item == array[middle]:
found = True
else:
low = middle + 1
if found == True:
print('Found')
else:
print('Not Found')
这实际上是一个快速修复。
数组的索引从 0 而不是 1 开始,因此您只需要设置 low = 0
而不是 1 并更改 high = len(array) -1
因为数组的长度从 1 而不是 0 开始计算;因此 - 1