我很难理解这段代码中的错误:
def arr_sort_binsearch(ar):
ar.sort()
first = 0
last = len(ar)-1
found = False
item = 8
for num in ar:
while first<=last and not found:
midpoint = (first + last)//2
if ar[midpoint] + num == item:
found = True
else:
if item < ar[midpoint]:
last = midpoint-1
else:
first = midpoint+1
print("{} and {} is: {}".format(num, ar[num], item))
ar = [1,3,5,7]
arr_sort_binsearch(ar)
我得到一个异常,说我的索引超出了范围。我理解索引溢出的理论仅仅是我在代码中找不到它。
答案 0 :(得分:2)
错误在于我认为这句话:
print("{} and {} is: {}".format(num, ar[num], item))
num不应该是ar
中的参数欢呼声
答案 1 :(得分:1)
如果您尝试编写二进制搜索,则代码不正确。
1,回答你的问题,为什么IndexError: list index out of range
:
将输入列表ar
上的代码循环为num
,最后print
,该元素将成为ar[num]
的索引,这会引发错误,例如:
你有ar=[1,2,3,4,5,8,9,11,6]
,当循环到9
时,print
尝试使用ar[9]
,但列表ar
中只有9个元素,超过最大索引8
,这将提升IndexError: list index out of range
。
2,您的二进制搜索可以像这样修改:
def arr_sort_binsearch(ar,item):
ar.sort()
first = 0
last = len(ar)-1
found = False
while first<=last and not found:
midpoint = (first + last)//2
if ar[midpoint] == item:
found = True
else:
if item < ar[midpoint]:
last = midpoint-1
else:
first = midpoint+1
return found
如果你调用函数,这将返回True或False:
arr_sort_binsearch([1,2,3,4,5,8,9,11,6],12)
返回错误
arr_sort_binsearch([1,2,3,4,5,8,9,11,6],8)
返回True