• python3实现数据结构与算法30天-查找-二分查找(3)


    二分查找,折半查找,在一个排好序的列表,列表元素lst[0:n],时间复杂度:O(logn)

    思想:
    1.确定初始下界上界(索引-index),下界0,上界列表长度减1
    2.判断条件控制while循环,下界小于上界,中间值整除2向下取整,如不满足循环,说明列表无此元素
    3.情况1,fast way,中间值索引对应的列表值等于要查找的数值,返回index
    4.情况2,如果目标值在mid左侧,即上界应该从新确定,在mid左侧减1,赋值后进入下轮循环
    5.情况3,如果目标值在mid的右侧,即下界应该从新确定,在mid右侧加1,赋值后进入下轮循环

    代码:

    import random
    
    def binary_search(lst, val):
        left = 0
        right = len(lst)-1
    
        while left <= right: # 候选区有值
            mid = (left + right) // 2 # 向下取整
            if lst[mid] == val:
                return mid
            elif lst[mid] > val: # 目标值在mid左侧
                right = mid - 1
            else: # lst(mid) < val, 目标值在mid右侧
                left = mid + 1
    
        else:
            return None
    
    if __name__ == "__main__":
        lst = [random.randint(0,50) for x in range(10)]
        lst.sort()
        val = random.choice(lst)
        print(binary_search(lst, val))
    
  • 相关阅读:
    pwm驱动原理和代码实现
    物理-引力场:百科
    物理-引力:百科
    术语-物理-超距作用:百科
    物理-量子力学-量子纠缠:百科
    un-心理学:目录
    心理学-享乐主义:百科
    un-心理学:百科
    人才-理想人才:百科
    笔记-设计-页面-普天
  • 原文地址:https://www.cnblogs.com/davis12/p/14534622.html
Copyright © 2020-2023  润新知