二分查找的递归与非递归实现方法/查找算法总结

二分查找的前提是序列必须要排序完成,不能拿无序序列来进行二分法查找。

二分查找的最优时间复杂度为O(1),最坏时间复杂度为O(log n)

二分查找的递归版本

def binary_search(alist,item):
    n=len(alist)
    if n>0:
        mid = n // 2
        if alist[mid]==item:
            return True  #找到返回True
        elif item<alist[mid]:
            return  binary_search(alist[:mid],item)
        else:
            return binary_search(alist[mid+1:],item)
    return False  #没有找到返回False
if __name__ == '__main__':
    li = [14, 17, 26,31, 44 ,55, 77 , 93]
    print(binary_search(li,55))
    print(binary_search(li,5))

二分查找的非递归版本

def binary_search(alist,item):
    n=len(alist)
    first=0
    last=n-1
    while first<=last:
        mid = (first + last) // 2
        if alist[mid]==item:
            return True
        elif item<alist[mid]:
            last=mid-1
        else:
            first=mid+1
    return False


if __name__ == '__main__':
    li = [14, 17, 26,31, 44 ,55, 77 , 93]
    print(binary_search(li,55))
    print(binary_search(li,100))

猜你喜欢

转载自blog.csdn.net/qq_39112101/article/details/88762827
今日推荐