Python算法设计|二分查找

版权声明:原创不易,本文禁止抄袭、转载,侵权必究!

一、二分查找

二分查找也被称为折半查找,是在一个有序数组中查找特定元素位置的查找算法。二分查找要求查找序列采用顺序存储,且按关键字有序排列

据说,二分查找最先出现在上个世纪50年代,但是直到60年代中期才出现了第一个正确的实现。在2006年,Java 库中关于二分查找的程序仍然因 Bug 的出现不得不被修复。实现一个完美的二分查找是有一定的难度的,要充分考虑到它的退出条件和中间点的计算

二、算法思路

  • 从中间元素开始搜索。如果正好是要搜索元素,则搜索结束
  • 如果不等,则在大于或者小于要搜索元素的那一半再执行二分查找
  • 如果在某一步后要查找的数组为空,则代表找不到,可设为-1

这种算法每一次比较都使搜索范围缩小一半,因此非常高效。

三、Python算法实现


def search(data, item):
    left, right = 0, len(data) - 1
	#数组升序
    while left <= right:
        middle = (left + right) // 2

        if item < data[middle]:
            right = middle - 1
        elif item > data[middle]:
            left = middle + 1
        else:
            return middle
	
	#数组降序
    # while left >= right:
    #     middle = (right + left)  // 2

    #     if item > data[middle]:
    #         right = middle - 1
    #     elif item < data[middle]:
    #         left = middle + 1
    #     else:
    #         return middle

    return -1

firstSearch = search([3, 5, 8, 10, 15], 0)
print(firstSearch)
secondSearch = search([3, 5, 8, 10, 15], 8)
print(secondSearch)
# secondSearch = search([15,10,8,5,3], 8)
# print(secondSearch)

注意:这里测试的是数组升序以及不存在的情况,如有需要可自行更改相应的情况

四、作者Info

Author:小鸿的摸鱼日常,Goal:让编程更有趣!

专注于算法、爬虫,网站,游戏开发,数据分析、自然语言处理,AI等,期待你的关注,让我们一起成长、一起Coding!

版权说明:本文禁止抄袭、转载 ,侵权必究!

猜你喜欢

转载自blog.csdn.net/qq_44000141/article/details/130092719