Python二分法

二分法

 尽管二分搜索通常优于顺序搜索,但当n较小时,排序引起的额外开销可能并不划算。实际上应该始终考虑,为了提高搜索效率,额外排序是否值得。如果排序一次后能够搜索多次,那么排序的开销不值一提。然而,对于大型列表而言,只排序一次也会有昂贵的计算成本,因此从头进行顺序搜索可能是更好的选择。

#二分法
def binarySearch(baseList: list, item: int) -> bool:
    first = 0
    end = len(baseList)-1
    found = False
    while first <= end and not found:
        mid = (first + end) // 2
        if baseList[mid] == item:
            found = True
        else:
            if item < baseList[mid]:
                end = mid -1
            else:
                first = mid +1
    return found
#递归二分法
def binaryS(baseList: list, item: int) -> bool:
    if len(baseList) == 0:
        return False
    else:
        if baseList[(mid := len(baseList) //2)] == item:
            return True
        else:
            if item < baseList[mid]:
                return binaryS(baseList[:mid],item)
            else:
                return binaryS(baseList[mid+1:],item)

 

posted @ 2022-04-16 15:45  yetangjian  阅读(96)  评论(0编辑  收藏  举报