zoukankan      html  css  js  c++  java
  • 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))
    
  • 相关阅读:
    MongoDB 与 MySQL 性能比较
    PySpider简易教程
    使用redis有什么缺点
    禅道
    Shell02
    Shell01
    性能测试06
    性能测试05
    性能测试04
    性能测试03
  • 原文地址:https://www.cnblogs.com/davis12/p/14534622.html
Copyright © 2011-2022 走看看