-1

大家下午好,我正在尝试整理已经按字母顺序排序的名称。我不知道为什么我的程序不工作。任何提示或指示都会很好。谢谢。

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  
4

2 回答 2

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模块中。但是,如果您是出于练习或任何其他原因编写自己的,那很好。

于 2013-04-07T19:32:18.980 回答
0

如果您使用的是 python 3.*,那么您将要更改 m = (start+end)/2m = (start+end)//2 当您执行 /2 时,它会在 3.* 中输出一个浮点数

于 2014-06-16T20:56:36.353 回答