bisection_search产生意外的None结果

时间:2018-08-21 01:03:11

标签: python

我正在按照说明编写bisection_search:

import random
arr = list(range(11))
random.shuffle(arr)
m = 9
#list is a stack in python
def bisection_search(m, arr):
    top_index = len(arr) - 1 # rather than top_index = -1 
    bottom_index = 0
    while  bottom_index <= top_index:
        mid_index = (top_index + bottom_index) // 2
        pivot = arr[mid_index]
        if m == pivot:
            return mid_index
        if m > pivot:
            bottom_index = mid_index + 1
        else:
            top_index = mid_index - 1
    return None

target_index = bisection_search(m, arr)
print(target_index)
## -- End pasted text --
None

我使用了ipython的%paste,它返回None,
也尝试过:

In [3]: arr
Out[3]: [4, 10, 7, 3, 0, 1, 9, 6, 2, 5, 8]

In [4]: m
Out[4]: 9

In [5]: bisection_search(m, arr)

In [6]: x = bisection_search(m, arr)

In [7]: x

In [8]: def bisection_search(m, arr):

我仔细检查了代码并确认没有错误。

如何产生None(无)结果?

1 个答案:

答案 0 :(得分:1)

  1. 正如其他人所提到的那样,二分法/二进制搜索仅适用于排序的序列。您将获得None,因为它将根据条件检查随机地来回跳转,并且可能最终不会达到相等检查条件并因此返回None
  2. 除非有特殊原因要实施自己的二等分,否则请使用已经可用的https://docs.python.org/2/library/bisect.html