以下是用于通过迭代实现二进制搜索的代码,但始终在数组中不存在的元素输入时返回None
。请帮助我。
def BinarySearch(A,k,low,high):
#flag=False
while(low<=high):
mid=int((low+high)/2)
if(A[mid]==k):
#flag=True
return mid
elif(A[mid]>k):
high=mid-1
elif(A[mid]<k):
low=mid+1
else:
return -1
if __name__=='__main__':
arr=[int(x) for x in input().split()]
size=len(arr)
key=int(input("Enter The Element to Be Searched: "))
low=0
high=size
result=BinarySearch(arr,key,low,high)
print(result)
print("Result Found! At Index->",result)
答案 0 :(得分:1)
当元素存在时,代码可以正常工作,但是那里没有其他必要。
k可以等于(==),大于(>)或小于(<)A [mid],没有其他内容
并且当没有找到element时,您什么也没返回。
代码如下:
def BinarySearch(A,k,low,high):
while(low<=high):
mid=int((low+high)/2)
if(A[mid]==k):
return mid
elif(A[mid]>k):
high=mid-1
else:
low=mid+1
return -1
if __name__=='__main__':
arr=[int(x) for x in input().split()]
size=len(arr)
key=int(input("Enter The Element to Be Searched: "))
low=0
high=size
result=BinarySearch(arr,key,low,high)
print(result)
print("Result Found! At Index->",result)
答案 1 :(得分:1)
您可以写出比这更好的二进制搜索:),但这是经过2个简单修复后的代码。
FIX 2->如果没有此功能,则某些元素(例如99)会出错
def BinarySearch(A,k,low,high):
#flag=False
while(low<=high):
mid=int((low+high)/2) #(low+high) // 2
if A[mid]==k:
#flag=True
return mid
elif A[mid]>k:
high=mid-1
else: # A[mid]<k
low=mid+1
return -1 #FIX 1
if __name__=='__main__':
arr=[int(x) for x in input().split()]
size=len(arr)
key=int(input("Enter The Element to Be Searched: "))
low=0
high=size-1 #FIX 2
result=BinarySearch(arr,key,low,high)
print("Result Found! At Index->",result)
'''
1 2 3 7 9
Enter The Element to Be Searched:7
Result Found! At Index-> 3
1 2 3 7 9
Enter The Element to Be Searched: 99
Result Found! At Index-> -1
'''
答案 2 :(得分:0)
您应该将else
块的代码移出while
循环。在循环内部,无论如何都无法达到! 3 if
/ elif
条条件涵盖了所有可能性:
def BinarySearch(A,k,low,high):
#flag=False
while(low<=high):
mid=int((low+high)/2)
if(A[mid]==k):
return mid
elif(A[mid]>k):
high=mid-1
elif(A[mid]<k):
low=mid+1
# there is no else! <, >, == cover all cases
return -1 # here you know the element isn't there