我正在尝试制作二进制搜索算法,但我无法让它工作。它最终达到目标数量,但不会将其视为等于目标。 I.E.如果78是目标数,最终数组[midpoint]确实等于78但是我的if语句不会那样看,它会看到它多于或少于78.
[3, 30, 33, 38, 57, 61, 70, 89, 93, 98]
Enter a number to search for.93
5
61
more
8
93
more
9
98
more
10
这是一次测试的结果。我打印更多只是为了知道它在做什么。它打印的第一个数字是中点,第二个数字是该点数组中的项目。
达到10后,我得到索引超出范围错误。
这是我的代码。
def BinarySearch(array):
found = False
startpos = 0
endpos = len(array)
mid = 0
target = raw_input("Enter a number to search for.")
while found == False or startpos <= endpos:
mid = (startpos + endpos)/2
if array[mid] == target:
print "Found"
found = True
return found
elif array[mid] < target:
startpos = mid + 1
else :
endpos = mid - 1
return found
答案 0 :(得分:1)
endpos
的初始值应为len(array) - 1
,因为数组的索引从0开始。or
替换为and
,因为这两个条件中的任何一个都可以终止while
循环。target
值转换为int
,即target = int(target)
答案 1 :(得分:1)
target
是一个字符串。您需要将其转换为整数。 target = int(target)