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

简介: 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))


运行之后,效果如下:


相关文章
|
5天前
|
算法 搜索推荐 C语言
Python实现数据结构与算法
【5月更文挑战第13天】学习数据结构与算法能提升编程能力,解决复杂问题,助你面试成功。从选择资源(如《算法导论》、Coursera课程、LeetCode)到实践编码,逐步学习基本概念,通过Python实现栈、队列和快速排序。不断练习、理解原理,探索高级数据结构与算法,参与开源项目和算法竞赛,持续反思与实践,以提升技术能力。
6 0
|
5天前
|
机器学习/深度学习 算法 数据可视化
Python 数据结构和算法实用指南(四)(4)
Python 数据结构和算法实用指南(四)
10 1
|
5天前
|
机器学习/深度学习 存储 算法
Python 数据结构和算法实用指南(四)(3)
Python 数据结构和算法实用指南(四)
14 1
|
5天前
|
存储 算法 搜索推荐
Python 数据结构和算法实用指南(四)(2)
Python 数据结构和算法实用指南(四)
10 0
|
5天前
|
存储 算法 Serverless
Python 数据结构和算法实用指南(四)(1)
Python 数据结构和算法实用指南(四)
14 0
|
5天前
|
存储 算法 搜索推荐
Python 数据结构和算法实用指南(三)(4)
Python 数据结构和算法实用指南(三)
10 1
|
5天前
|
存储 搜索推荐 算法
Python 数据结构和算法实用指南(三)(3)
Python 数据结构和算法实用指南(三)
10 1
|
5天前
|
存储 算法 前端开发
Python 数据结构和算法实用指南(三)(2)
Python 数据结构和算法实用指南(三)
10 1
|
5天前
|
存储 算法 编译器
Python 数据结构和算法实用指南(三)(1)
Python 数据结构和算法实用指南(三)
13 1
|
5天前
|
存储 算法 搜索推荐
Python 数据结构和算法实用指南(二)(4)
Python 数据结构和算法实用指南(二)
11 2