二进制搜索代码不起作用

时间:2013-04-07 19:06:11

标签: python-3.x

大家下午好, 我正在尝试整理已按字母顺序排序的名称。我无法弄清楚为什么我的程序不起作用。任何提示或指示都会很好。感谢。

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  

2 个答案:

答案 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)/2m = (start+end)//2 当你执行/ 2时,它会在3。*

中输出一个浮点数