[英]Python repeated output from program
我创建了二进制搜索,但是遇到了问题。 每当我运行main()时,当键等于8、5、2和1时,我只会得到None。我还试图让bsearch返回integer_list中key_point值的索引,但它只会返回key_point。 如果有人能让我知道出了什么问题,我将不胜感激。
def bsearch(integer_list, key_point, start, end):
midpoint = (start + end) // 2
if start >= end:
return None
elif integer_list[midpoint] == key_point:
return key_point
elif integer_list[midpoint] > key_point:
return bsearch(integer_list, key_point, start, (midpoint - 1))
elif integer_list[midpoint] < key_point:
return bsearch(integer_list, key_point, (midpoint + 1), end)
def main( ):
integer_list = [x + 1 for x in range(0, 10)]
key = 11
p = len(integer_list) - 1
start = integer_list[0]
end = integer_list[p]
while key >= 1:
bsearch(integer_list, key, start, end)
print(bsearch(integer_list, key, start, end))
key = key - 1
您有以下错误:
1)从main
到binary_search
的调用包含start = 1 and
end = 10 which should have been
start = 0和end = 9
(索引值)。我们根据索引找到所有中点。
2)只需检查start > end
因为start == end
绝对正确,并且出现None
情况都是由于这种情况。 由于这种情况您返回的所有情况实际上都是integer_list[midpoint] == key_point
成立的情况。
这是更正的代码:
def bsearch(integer_list, key_point, start, end):
midpoint = (start + end) // 2
if start > end:
return None
elif integer_list[midpoint] == key_point:
return key_point
elif integer_list[midpoint] > key_point:
return bsearch(integer_list, key_point, start, (midpoint - 1))
elif integer_list[midpoint] < key_point:
return bsearch(integer_list, key_point, (midpoint + 1), end)
def main():
integer_list = [x + 1 for x in range(0, 10)]
key = 11
p = len(integer_list) - 1
start = integer_list[0]
end = integer_list[p]
while key >= 1:
print(bsearch(integer_list, key, 0, p))
key = key - 1
main()
希望有帮助:)
您正在算法中多次混合索引和值。 您的基本案例/发现案例应该返回中点,因为这是您找到它的地方,但是您返回的是key_point,实际上是您要搜索的值。
同样,在设置循环时,您将开始和结束值设置为List的开头和结尾的内容,而不是开头和结尾的索引。 如果您为test_list使用了一组数字,而不仅仅是连续数字1-11,那么其中的一些错误将变得更加明显。 现在,它正好排队。
首先,您要将值而不是索引传递给函数:
start = 0
end = len(integer_list) - 1
第二,当开始和结束都相反时,您需要返回None。 当它们相等时
if start > end:
return None
第三,为什么要返回要搜索的值? 这没有任何意义。 您应该改为返回元素的索引。
elif integer_list[midpoint] == key_point:
return mid_point
最后,如果要遵循几乎所有搜索方法返回的内容,则在找不到所需的值时应返回-1,而不是None。 这将使您免于头痛。
if start > end:
return -1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.