二分查找

 

 

第几次查询      剩余查询数

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

  

 

posted @ 2021-08-13 13:23  不带R的墨菲特  阅读(29)  评论(1)    收藏  举报