• 二分查找


    Python实现

    def binary_search(my_list: list, item: int):
        # low和high用于跟踪列表中需要查找的范围
        low = 0
        high = len(my_list) - 1
    
        cntr = 1
        while low <= high:
            # 获取中间元素
            mid = (low + high) // 2
            guess = my_list[mid]
    
            print("进行第%s次寻找,范围为%s-%s,中间值为%s" % (cntr, low, high, guess))
            cntr += 1
    
            # 如果相等,则找到了相应的元素
            if guess == item:
                return mid
            # 如果中间元素大于需要查找的元素,说明需要查找的元素在左半边
            elif guess > item:
                high = mid - 1
            # 如果中间元素小于需要查找的元素,说明需要查找的元素在右半边
            else:
                low = mid + 1
    
        # 如果没有找到元素,返回None
        return None
    
    
    if __name__ == '__main__':
        my_list = [x for x in range(1000) if x % 2 != 0]
        print("找到值的位置为:", binary_search(my_list, 999))
    
    

    进行第1次寻找,范围为0-499,中间值为499
    进行第2次寻找,范围为250-499,中间值为749
    进行第3次寻找,范围为375-499,中间值为875
    进行第4次寻找,范围为438-499,中间值为937
    进行第5次寻找,范围为469-499,中间值为969
    进行第6次寻找,范围为485-499,中间值为985
    进行第7次寻找,范围为493-499,中间值为993
    进行第8次寻找,范围为497-499,中间值为997
    进行第9次寻找,范围为499-499,中间值为999
    找到值的位置为: 499

    时间复杂度

    二分查找法的时间复杂度为:(O(log_2n))

  • 相关阅读:
    QT项目之创建.pri文件
    QT中使用pri子工程
    foreach
    Qt--解析Json
    C++构造函数的default和delete
    QVariantMap 和 QVariant
    __attribute__中constructor和destructor
    唯品会
    获取图片和下载到本地和名字和链接的获取
    python实现屏幕截图
  • 原文地址:https://www.cnblogs.com/focksor/p/binary_search_python.html
Copyright © 2020-2023  润新知