如何解决二进制搜索找不到特定数字
我正在建立一个二进制数搜索。它旨在查看一系列有序数字,以查看给定值是否在其中。
它能够找到一些数字,但是有时,当数字在搜索参数之内时,它将进入无限循环或返回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 = 5
和end_index = 7
,则计算得出的middle_index
为1
,而应为6
。
那么,对于初学者来说,您需要将start_index
添加到该范围大小计算中:
middle_index = start_index + int((end_index - start_index) / 2)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。