Python二进制搜索项不等于目标

时间:2015-09-16 11:26:11

标签: python

我正在尝试制作二进制搜索算法,但我无法让它工作。它最终达到目标数量,但不会将其视为等于目标。 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

2 个答案:

答案 0 :(得分:1)

  • endpos的初始值应为len(array) - 1,因为数组的索引从0开始。
  • or替换为and,因为这两个条件中的任何一个都可以终止while循环。
  • target值转换为int,即target = int(target)

答案 1 :(得分:1)

target是一个字符串。您需要将其转换为整数。 target = int(target)