跟随在python中实现的二进制搜索代码有什么错误?

时间:2018-09-15 09:41:09

标签: python arrays data-structures

以下是用于通过迭代实现二进制搜索的代码,但始终在数组中不存在的元素输入时返回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)

3 个答案:

答案 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