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

  • 相关阅读:
    JetBrains下载历史版本
    php入门笔记
    Ajax获取服务器信息
    Ubuntu上安装PHP环境-mysql+apache+php-Linux操作系统
    Ubuntu彻底删除/卸载mysql,php,apache
    轻松理解JS基本包装对象
    JS事件委托
    浅谈JS事件冒泡
    JS闭包那些事
    浅谈JS的变量提升
  • 原文地址:https://www.cnblogs.com/focksor/p/binary_search_python.html
Copyright © 2011-2022 走看看