Python数据结构与算法(19)---二分查找

Posted 李元静

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python数据结构与算法(19)---二分查找相关的知识,希望对你有一定的参考价值。


二分查找

二分查找又名Binary Search,其采用折半的查找方式,实现对有序元素的快速查找。

相信看到上面二分查找的定义,读者很容易就能想到,二分查找有一个非常重要的前提条件,那就是其需要已经排序好的数列。这样,我们折半查找可以缩小查找的次数,更加的高效。

其具体原理:在数列中取中间下标值mid的元素e,进行查找元素key的比较。如果相等即查找成功,如果不等,大于就只需要在后半部分查找,小于需要在前半部分查找。

不管是前半部分还是后半部分,我们在取其中间值mid,进行比较,依次类推,直到mid值等于key结束查找。

其时间复杂度为:O(log2n) 。

图解二分查找

假设,我们现在有一个数列[1,3,5,7,9,11,13],我们需要查找13所在的索引位置,那么的步骤应该分几步?


如上图所示,我们这里先取中间索引值3,与13进行比较。13不等于list[3],且大于它,接下来我们需要取后半部分进行查找。

同样的,在取后半部分中间值进行比较,依然大于它。最后,我们只剩下一个值,如果相等,返回查找到的索引,如果不等,返回查询不到。

实战:二分查找

了解其具体的原理之后,我们接下来通过Python来实现其二分查找的具体效果。示例代码如下所示:

def binary_search(my_list, key):
    left = 0
    right = len(my_list)
    while left <= right:
        mid = (right - left) // 2
        if my_list[left + mid] < key:
            left = left + mid + 1
        elif my_list[left + mid] > key:
            right = left + mid - 1
        else:
            return left + mid
    return "None"


if __name__ == "__main__":
    my_list = [1, 3, 5, 7, 9, 11, 13]
    print("二分查找的原始数列:", my_list)
    print("二分查找的返回结果:", binary_search(my_list, 3))

运行之后,效果如下:

以上是关于Python数据结构与算法(19)---二分查找的主要内容,如果未能解决你的问题,请参考以下文章

Python数据结构与算法(19)---二分查找

Python数据结构与算法(19)---二分查找

Python数据结构与算法篇-- 二分查找与二分答案

python数据结构与算法第十四天二分查找

Python——递归二分查找算法

[数据结构与算法] Python实现二分查找