二进制搜索找不到特定数字

问题描述

我正在建立一个二进制数搜索。它旨在查看一系列有序数字,以查看给定值是否在其中。

它能够找到一些数字,但是有时,当数字在搜索参数之内时,它将进入无限循环或返回False。

我当前拥有的代码是:

def binary_search(data_input,user_input):
    start_index = 0
    end_index = len(data_input) - 1

    while True:
        middle_index = int((end_index - start_index) / 2)
        if user_input > data_input[end_index] + 1 or user_input < data_input[start_index] - 1:
            return False

        if middle_index > end_index or middle_index < start_index:
            return False

        middle_element = data_input[middle_index]
        if middle_element == user_input:
            return True
        elif user_input > middle_element:
            start_index = middle_index
        else:
            end_index = middle_index


# I have used this loop to see which numbers create a problem
for i in range(12):
    x = 10
    data_in = np.arange(x)
    user_num = i

    print(user_num,binary_search(data_in,user_num))

此特定循环的结果是:

0 True
1 True
2 True
3 False
4 True
5 False
6 False
7 False
8 False
9 False
10 False
11 False

我不知道为什么会这样。可以肯定,这是我的愚蠢,但是如果有人可以帮助我,我将不胜感激!

干杯

解决方法

我无法讲解算法的其余部分,但是middle_index的计算是不正确的:

middle_index = int((end_index - start_index) / 2)

例如,如果start_index = 5end_index = 7,则计算得出的middle_index1,而应为6

那么,对于初学者来说,您需要将start_index添加到该范围大小计算中:

middle_index = start_index + int((end_index - start_index) / 2)