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

  • 相关阅读:
    evernote100个做笔记的好方法
    平衡二叉树的调整模版
    晨间日记的奇迹
    hdu 2952 Counting Sheep
    hdu 1535 Invitation Cards
    poj 3259 Wormholes(spfa)
    poj 2263 Heavy Cargo(floyd)
    poj 3268 Silver Cow Party(SPFA)
    hdu 1690 Bus System
    hdu 3631 Shortest Path(Floyd)
  • 原文地址:https://www.cnblogs.com/focksor/p/binary_search_python.html
Copyright © 2011-2022 走看看