zoukankan      html  css  js  c++  java
  • 二分查找

    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))

  • 相关阅读:
    Python3高级基础(2)
    Python3面向对象基础
    Python3学习策略
    Python3基础之基本问题
    Python3基础之字典
    (转)修改IIS默认的localhost名称
    (转)IIS5.1的安装配置并发布ASP.NET网站
    (转)怎样查看局域网中自己的IP地址和其他电脑的IP地址?
    (转)sql中 in 、not in 、exists、not exists 用法和差别
    (转)union和union all的区别
  • 原文地址:https://www.cnblogs.com/focksor/p/binary_search_python.html
Copyright © 2011-2022 走看看