Algorithm 二进制搜索程序不';I don’我没有按预期工作;怎么了?
在我的程序中,我得到的值是“无”?我哪里出错了Algorithm 二进制搜索程序不';I don’我没有按预期工作;怎么了?,algorithm,python-3.x,binary-search,Algorithm,Python 3.x,Binary Search,在我的程序中,我得到的值是“无”?我哪里出错了 lis2 = [1, 3, 6, 2, 5, 4, 8, 12] lis2 = sorted(lis2) start = 0 end = len(lis2) mid = (start+end)/2 def binary_search(i): global mid,start,end if i==lis2[mid]: return "Found" elif i<lis2[mid]: en
lis2 = [1, 3, 6, 2, 5, 4, 8, 12]
lis2 = sorted(lis2)
start = 0
end = len(lis2)
mid = (start+end)/2
def binary_search(i):
global mid,start,end
if i==lis2[mid]:
return "Found"
elif i<lis2[mid]:
end = mid-1
mid = (start+end)/2
elif i>lis2[mid]:
start = mid+1
mid = (start+end)/2
else:
return "Not Found"
binary_search(i)
print(binary_search(6))
lis2=[1,3,6,2,5,4,8,12]
lis2=已排序(lis2)
开始=0
end=len(lis2)
中间=(开始+结束)/2
def二进制搜索(i):
全球中期、开始、结束
如果i==lis2[mid]:
返回“找到”
elif ilis2[mid]:
开始=中间+1
中间=(开始+结束)/2
其他:
返回“未找到”
二进制搜索(i)
打印(二进制搜索(6))
感谢您的帮助,谢谢 在函数末尾,调用函数recursivley时需要返回结果:
def binary_search(i):
global mid,start,end
if i==lis2[mid]:
return "Found"
elif i<lis2[mid]:
end = mid-1
mid = (start+end)/2
elif i>lis2[mid]:
start = mid+1
mid = (start+end)/2
else:
return "Not Found"
return binary_search(i) # <----- EDITED
def二进制搜索(i):
全球中期、开始、结束
如果i==lis2[mid]:
返回“找到”
elif ilis2[mid]:
开始=中间+1
中间=(开始+结束)/2
其他:
返回“未找到”
返回二进制搜索(i)#存在三个错误-
- 首先,正如您在评论中提到的和您编写的答案之一-
binary\u search(i)
而不是return binary\u search(i)
- 二是逻辑错误。如果元素不在列表中,代码将运行到无限循环中。为了避免在
start>end
时进行此检查,如果发生ti,则元素不存在
- 第三,您将
end
初始化为len(lis2)
,如果您试图搜索列表中不存在且大于列表中最大元素(例如23)的元素,这将导致索引器:列表索引超出范围。因此,将end=len(lis2)
更改为end=len(lis2)-1
正确代码-
lis2 = [1, 3, 6, 2, 5, 4, 8, 12]
lis2 = sorted(lis2)
start = 0
end = len(lis2)-1
mid = int((start+end)/2)
def binary_search(i):
global mid,start,end
if(start>end):
return "Not Found"
if i==lis2[mid]:
return "Found"
elif i<lis2[mid]:
end = mid-1
mid = int((start+end)/2)
elif i>lis2[mid]:
start = mid+1
mid = int((start+end)/2)
return binary_search(i)
print(binary_search(6))
lis2=[1,3,6,2,5,4,8,12]
lis2=已排序(lis2)
开始=0
end=len(lis2)-1
mid=int((开始+结束)/2)
def二进制搜索(i):
全球中期、开始、结束
如果(开始>结束):
返回“未找到”
如果i==lis2[mid]:
返回“找到”
elif ilis2[mid]:
开始=中间+1
mid=int((开始+结束)/2)
返回二进制搜索(i)
打印(二进制搜索(6))
完成函数的最后一行返回二进制搜索(i)
。工作完美!谢谢!