• 二分查找


    二分查找

    二分查找是一种算法,它的输入是一个有序列表。如果所要查找的元素在其中就返回其位置,否则就返回None。

    二分查找在生活中最常见的例子就是猜数游戏,游戏的玩法呢就是支持人给出一个数的范围,心里确定一个数,让其他人来猜。每次当有人猜错时,主持人便会告诉我们猜大了还是猜小了,相应的我们的猜数范围也跟着缩小,直至猜中那个数。

    一般来说的猜数方式常见的就是挨个挨个问,比如说主持人给的数字范围是0——10,你呢第一次猜4,主持人说小了,然后你就会猜5、6...直到猜到10 。其中一共猜了7次,当然,这只是一种假设。另一种切实可行的方法呢就是,你第一个数猜(0 + 10 )// 2 == 5,主持人说小了,然后你就猜(6 + 10)// 2 == 8,主持人又说小了,然后你接着(8 + 10)// == 9,主持人还说小了,但是,你已经知道了答案,那就是10,这个方式猜了3次。这呢,就是二分查找,每次查找范围减少一半,用的时间也相应的减少。

    # binary search
    
    
    def binary_search(l, item):     # l是给的猜数范围,item是猜的数
        low_index = 0       # 起始位置
        high_index = len(l) - 1  # 结尾的位置
        while low_index <= high_index:      # 当猜的数不在列表中时,可以验证
            mid = (low_index + high_index) // 2  # 中间数
            if l[mid] == item:      # 如果找到则返回下标
                return mid
            if l[mid] < item:       # 若中间的那个数比猜的数小/大,那么猜数的的范围相应的变化
                low_index = mid + 1
            else:
                high_index = mid - 1
        return None
    
    
    def main():
        l = list(range(5))
        print(binary_search(l, 2))
        print(binary_search(l,-1))
    
    
    if __name__ == '__main__':
        main()
    
    
    

    输出结果:

    2
    None
    
  • 相关阅读:
    01-节点层次
    WebAPI02
    WebAPI01
    牛客剑指Offer7
    Python字典排序
    Python字典中的键映射多个值
    计算机硬件的主要技术指标
    计算机的基本组成
    计算机系统概论
    数据库概论
  • 原文地址:https://www.cnblogs.com/JonnyJiang-zh/p/13259970.html
Copyright © 2020-2023  润新知