大家下午好, 我正在尝试整理已按字母顺序排序的名称。我无法弄清楚为什么我的程序不起作用。任何提示或指示都会很好。感谢。
def main():
names = ['Ava Fiscer', 'Bob White', 'Chris Rich', 'Danielle Porter', 'Gordon Pike', 'Hannah Beauregard', 'Matt Hoyle', 'Ross Harrison', 'Sasha Ricci', 'Xavier Adams']
input('Please enter the name to be searched: ', )
binarySearch
main()
def binarySearch(names):
first = 0
last = len(names) - 1
position = -1
found = False
while not found and first <= last:
middle = (first + last) / 2
if names[middle] == value:
found = True
position = middle
elif arr[middle] > value:
last = middle -1
else:
first = middle + 1
return position
答案 0 :(得分:0)
该计划无效是什么意思?这是语法错误还是错误结果中的问题?
使用您粘贴的代码,有几个缩进问题,但除此之外,还有行:
input('Please enter the name to be searched: ', )
binarySearch
在语法上也是不正确的,逗号是多余的,只有像这样出现的函数名称是完全错误的。如果您对算法的正确性感兴趣,那似乎没问题,但边界总是很棘手。如果您觉得它有用,我下面的代码在工作和语法上是正确的。 (名称是数字,但在这种情况下无关紧要)
names = [1,2,4,5,6,8,9]
def bs(n):
start = 0
end = len(names)
while end - start > 0:
m = (start+end)/2
if names[m] == n:
return m
elif n < names[m]:
end = m
else:
start = m + 1
return -1
print (bs(1))
print (bs(6))
print (bs(9))
print (bs(3))
print (bs(10))
print (bs(-8))
我想指出的另一件事是这种二进制搜索已经存在于python标准库bisect模块中。但是,如果您是为了练习或出于任何其他原因而写自己的。
答案 1 :(得分:0)
如果您使用的是python 3. *那么您将要更改
m = (start+end)/2
至
m = (start+end)//2
当你执行/ 2时,它会在3。*