Python二进制搜索
我是一个初学者程序员,我想在没有任何帮助的情况下从头开始制作自己的二进制搜索算法。可以肯定地说,事情进展得不顺利。我希望有人能找到我代码中的错误。我修复了一些问题,但现在我遇到了这样的问题:如果找不到大于中间索引的值,那么当它达到一个不等于目标值的值时,它就不会结束Python二进制搜索,python,loops,binary-search,Python,Loops,Binary Search,我是一个初学者程序员,我想在没有任何帮助的情况下从头开始制作自己的二进制搜索算法。可以肯定地说,事情进展得不顺利。我希望有人能找到我代码中的错误。我修复了一些问题,但现在我遇到了这样的问题:如果找不到大于中间索引的值,那么当它达到一个不等于目标值的值时,它就不会结束 import random userInput = 100 numbers = [] for i in range(100): numbers.append(random.randint(0, 100)) #A
import random
userInput = 100
numbers = []
for i in range(100):
numbers.append(random.randint(0, 100))
#Adding 100 to use as a test
numbers.append(100)
numbers.sort()
print(numbers)
def binarySearch(list, target):
midIndex = int(len(list)/2)
midValue = list[midIndex]
if midValue == target:
print("We found " + str(target))
elif target > midValue:
newList = numbers[midIndex:]
binarySearch(newList, target)
elif target < midValue:
newList = numbers[:midIndex]
binarySearch(newList, target)
elif len(list) == 1 and list[0] != target:
print(target + " is not in the list")
else:
print("It's not in the list")
binarySearch(numbers, userInput)
随机导入
用户输入=100
数字=[]
对于范围(100)内的i:
数字.append(random.randint(01100))
#添加100以用作测试
数字。追加(100)
number.sort()
打印(数字)
def二进制搜索(列表,目标):
midIndex=int(列(列表)/2)
中值=列表[midIndex]
如果中值==目标:
打印(“我们发现”+str(目标))
elif目标>中值:
新列表=数字[midIndex:]
二进制搜索(新列表,目标)
elif目标<中值:
newList=数字[:midIndex]
二进制搜索(新列表,目标)
elif len(list)==1,list[0]!=目标:
打印(目标+“不在列表中”)
其他:
打印(“不在列表中”)
二进制搜索(数字、用户输入)
您的代码有两个主要问题:
mid
用于表示索引和值binarySearch()
的结尾mid
使用list
的一部分创建newList
时,使用mid
作为索引:
elif target > mid:
newList = numbers[mid:]
但是,mid
不是索引。<代码>列表> >中的值:
mid = list[int(len(list)/2)]
尝试使用两个变量:
midIndex = int(len(list)/2)
midValue = list[midIndex]
问题2:binarySearch()
binarySearch()
永远不会到达最后的elif
,以查看target
是否不在列表中
只有在检查以下条件后,才能达到最终的elif
:
if midValue == target:
...
elif target > midValue:
...
elif target < midValue:
...
要解决此问题,请尝试重新排列
if
语句,以便binarySearch()
到达代码的这一部分。什么是错误,什么不起作用?另一方面,变量和函数名应遵循带有下划线的小写形式。“递归错误:超过最大递归深度”这是经常出现的错误。下一个答案可能会解决所有问题。如果您手头有更好的调试器,请尝试记录日志,以了解代码在关键时刻正在做什么,这样您就可以一步一步地了解正在发生的事情。。。也可以尝试使用少于100的数字来获得更好的概览谢谢你的帮助,但现在我遇到了一个问题,如果找不到大于中间索引的值,当它达到一个不等于目标值的值时,它不会结束。@03Wolf我更新了我的答案,包括如何解决第二个问题的解释。
elif len(list) == 1 and list[0] != target:
...