Python二分查找详解

在计算机科学中,二分查找算法(英语:binary search algorithm),也称折半搜索算法(英语:half-interval search algorithm)、对数搜索算法(英语:logarithmic search algorithm),是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。

二分查找算法在最坏情况下是对数时间复杂度的,需要进行 O ( l o g n ) O(log^n)O(log

n

) 次比较操作,n nn在此处是数组的元素数量。二分查找算法使用常数空间,对于任何大小的输入数据,算法使用的空间都是一样的。除非输入数据数量很少,否则二分查找算法比线性搜索更快,但数组必须事先被排序。尽管一些特定的、为了快速搜索而设计的数据结构更有效(比如哈希表),二分查找算法应用面更广。

二分查找原理:二分查找只对有序数组有效。二分查找每次比较数组剩余元素的中间元素与目标值。如果目标值与中间元素相等,则返回其在数组中的位置;如果目标值小于中间元素,则搜索继续在前半部分的数组中进行。如果目标值大于中间元素,则搜索继续在数组上部分进行。由此,算法每次排除掉至少一半的待查数组。

python 复制代码
def binary_search(arr, left, right, hkey):
    ci=0
    while left <= right:
        ci+=1
        mid = left + (right - left) // 2
        if arr[mid] == hkey:
             #return mid
            break
        elif arr[mid] < hkey:
            left = mid + 1
        elif arr[mid] > hkey:
            right = mid - 1
    return '次数:%s,下标:%s'% (ci,mid)
print(binary_search([3,8,11,15,17,19,25,30,44],0,8,8))

例题:

1、对于数列3,8,11,15,17,19,25,30,44,采用二分法查找8,需要找几次?

过程:

3,8,11,15,17,19,25,30,44

3,8,11,15

8

使用上面的函数

运行结果:

所以答案:2次

2、用二分查找在1,999查找某个数值最多需要多少次?

答案:10次

当没有具体查找元素时,可以通过"除2"的方式来查找

用元素个数n循环除2,当n<=1时,统计循环次数,即查找次数

相关推荐
华研前沿标杆游学1 分钟前
2026标杆游学落地实践:某科技企业半年效率提升30%的实操
python
zh路西法14 分钟前
【双目相机 深度估计】PixelXYZ 3D 双目相机标定与实时深度估计全流程
python·opencv·相机标定·深度估计·双目相机·sgbm
闪电悠米14 分钟前
力扣hot100-240.搜索二维矩阵2-单调性剪枝详解
数据结构·算法·leetcode·矩阵·哈希算法
imuliuliang19 分钟前
关于基于图论的最短路径算法性能对比分析7
算法
雨落在了我的手上25 分钟前
Java数据结构(九):栈和队列
java·开发语言·数据结构
卷无止境26 分钟前
Python 相对导入与绝对导入的坑:从原理到工程实践
后端·python
FriendshipT29 分钟前
Ultralytics:简要解读YOLOv8 → YOLO11 → YOLO26网络架构
人工智能·pytorch·python·深度学习·yolo·目标检测
BaoshengTT30 分钟前
成都理想贴膜能否分期及汽车贴膜分期行业规则 保圣威固 7V 不凡门店
python·汽车
卷无止境32 分钟前
Python调试那点事儿:从pdb到日志系统的实战指南
后端·python
j7~32 分钟前
【C语言】《C语言自定义类型(结构体+联合体+枚举类型)》--详解
c语言·开发语言·深度学习·结构体·位段·联合体·枚举类型