美文网首页
二分查找--基于python

二分查找--基于python

作者: 么卡西 | 来源:发表于2019-04-21 11:45 被阅读0次

简介

二分查找是查找中常用的算法,时间复杂度为O(logn)(时间复杂度用来衡量一个算法查找的时间效率,是最糟糕的情况下的运行时间,衡量的是算法在随着输入的增加,查找的速度的增速),相较于顺序查找O(n),尤其是在数据量大的情况下,查找速度呈指数级别增长。其查找思想是每次取列表中间的元素与被查找的数进行比较(注意查找的前提是列表必须是有序的),如果该元素大于被查找数,则从列表左半部分继续查找(继续找中间的数),否则从右半部分查找,每次查找都能排除一半的元素,故效率非常高。

代码

def binary_search(my_list, item):
    low = 0  
    high = len(my_list) - 1 # 首先记录列表的首位和末尾索引,用以计算中间元素的位置
    while high >= low:  # 只要查找范围还没缩小到只包含一个元素,就继续查找
        mid = (high + low) // 2  # 中间元素的位置 `注意python3中用两个反斜线(地板除法)表示结果取整`
        guess = my_list[mid]  # 中间元素的值
        if guess == item:  # 如果中间元素就是被查找数,则该元素的位置就是最终结果
            return mid
        if guess > item:  # 如果该元素大于被查找数则从列表左半部分中继续查找
            high = mid - 1  #  将末尾的索引移到中间,由于中间数已经排除故可以往左挪一位
        else:  
            low = mid + 1 # 否则从列表右半部分继续查找
    return None  #最后找完整个列表也没找到,则返回None

验证

print( binary_search(my_list(-1,1,3,4,7,9), 7) )
4
print( binary_search(my_list(-1,1,3,4,7,9), 2) )
None

相关文章

  • 二分查找--基于python

    简介 二分查找是查找中常用的算法,时间复杂度为O(logn)(时间复杂度用来衡量一个算法查找的时间效率,是最糟糕的...

  • SearchInRotatedAry

    其实这个问题,是基于二分查找(BinarySearch)来解决的。所以这里需要先理解一下二分查找。 1. 二分查找...

  • 双指针(链表、数组)

    二分查找用于有序的排列python中的二分查找模块bisect,Python中的list.inidex时间复杂度是...

  • 基于Python——二分查找法

    二分查找算法也称折半查找,基本思想就是折半,和平时猜数字游戏一样,比如猜的数字时67,猜测范围是0-100,则会先...

  • 算法之二分查找

    二分查找 二分查找是著名、高效并有应用广泛的查找算法。 二分常规实现 1.循环实现 下面我用python语言实现循...

  • python二分查找

    python二分查找 # 查找数据import random# nums = [random.randint(1,...

  • Python实现二分法

    Python实现二分查找 为什么需要二分查找 如果查找1-100内任意一个数字?顺序查找(简单查找)从1开始或者1...

  • 算法-二分查找

    二分查找基于索引,所以必须是有序的

  • 基础算法笔记 python和C++

    二分查找 python code 选择排序 python code c++ code 快速排序 python c++

  • 算法之二分查找

    排序算法 二分查找 用于有序元素列表的查找性能: Python实现: C#实现

网友评论

      本文标题:二分查找--基于python

      本文链接:https://www.haomeiwen.com/subject/kqsdgqtx.html