第几次查询 剩余查询数
1 N/2
2 N/22
3 N/23
... ...
k N/2k
在第k次已经找到
N/2k = 1
k = log2N
则时间复杂度为O( log2N)
空间复杂度O(1),辅助空间度
def bin_search(arr,x): l,r = 0,len(arr)-1 # 左边小于右边 while l <=r : mid = (l + r )// 2 if x < arr[mid]: r = mid -1 elif x > arr[mid]: l = mid +1 else : return mid return False # 左大于右边 def bin_search_recur(arr,x): k = len(arr) if k<1: return False mid = k//2 if x< arr[mid]: return bin_search_recur(arr[:mid-1],x) elif x> arr[mid]: return bin_search_recur(arr[mid+1:],x) else : return True