首页 > 编程语言 >二分查找算法详解及Python实现

二分查找算法详解及Python实现

时间:2024-08-18 12:51:49浏览次数:15  
标签:二分 Python 查找 算法 详解 搜索 数组 目标值

目录

引言

二分查找算法步骤

二分查找的Python实现

性能分析

注意事项


引言

二分查找算法(Binary Search)是一种在有序数组中查找某一特定元素的搜索算法。它的基本思想是:通过比较数组中间的元素与目标值的大小,将搜索区间缩小为一半,直到找到目标值或搜索区间被缩小为0。二分查找算法的时间复杂度为O(log n),远优于线性查找的O(n)时间复杂度,特别适用于大数据量的查找场景。

二分查找算法步骤

  1. 确定搜索范围:初始化两个指针,分别指向数组的第一个元素和最后一个元素,确定搜索的起始和结束位置。
  2. 计算中间位置:通过(left + right) // 2计算中间位置(注意防止整数溢出)。
  3. 比较中间元素与目标值
    • 如果中间元素正好是要查找的目标值,则搜索过程结束。
    • 如果目标值小于中间元素,则在中间元素的左侧继续搜索。
    • 如果目标值大于中间元素,则在中间元素的右侧继续搜索。
  4. 更新搜索范围:根据比较结果更新left和right的值,继续步骤2,直到找到目标值或left > right(搜索范围为空)。

二分查找的Python实现

以下是二分查找算法的Python实现代码:

def binary_search(arr, target):  
    """  
    在有序数组arr中查找目标值target,返回其索引。  
    如果未找到,则返回-1。  
    """  
    left, right = 0, len(arr) - 1  
      
    while left <= right:  
        mid = (left + right) // 2  
        if arr[mid] == target:  
            return mid  
        elif arr[mid] < target:  
            left = mid + 1  
        else:  
            right = mid - 1  
      
    return -1  
  
# 测试代码  
if __name__ == "__main__":  
    arr = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]  
    target = 7  
    result = binary_search(arr, target)  
    if result != -1:  
        print(f"元素{target}在数组中的索引为:{result}")  
    else:  
        print(f"元素{target}在数组中未找到。")

性能分析

  • 时间复杂度:二分查找算法的时间复杂度为O(log n),其中n是数组的长度。这是因为每次比较后,搜索范围都会减半。
  • 空间复杂度:二分查找算法的空间复杂度为O(1),因为它只需要常数级别的额外空间来存储指针(或索引)变量。

注意事项

  • 二分查找算法要求数组必须是有序的。
  • 在实际应用中,二分查找算法常用于数据库索引、搜索算法等领域。
  • 当数据量较小或数组无序时,使用二分查找算法可能并不划算,因为初始化有序数组或维护数组有序状态的成本可能较高。

希望这篇文章能帮助你更好地理解二分查找算法及其Python实现!如果你有任何问题或需要进一步讨论,请随时在评论区留言。

标签:二分,Python,查找,算法,详解,搜索,数组,目标值
From: https://blog.csdn.net/qq_33502371/article/details/140920033

相关文章

  • 8.17日二分测试总结
    8.17日二分测试总结比赛传送门分数情况A.砍树B.买木头C.数列分段2D.吃冰棍E.跳石头F.奶牛晒衣服10080100\(_{没做:(}\)100总体分数\(_{很惨}\)T1.P1873[COCI2011/2012#5]EKO/砍树题目传送门问题分析运用二分答案与check函数check函数......
  • Python-程序语法 - Python注释&基本函数
    Python注释以#为行开头为注释相关函数str()---传入一个整型值,并求值为它的字符串形式Python2.7.17(default,Mar82023,18:40:28)[GCC7.5.0]onlinux2Type"help","copyright","credits"or"license"formoreinformation.>>>str......
  • Python之层次聚类/系统聚类(Hierarchical Clustering)、变量聚类
    1.层次聚类简介别称:系统聚类英文名:HierarchicalClustering基本原理:假设数据类别之间存在层次结构,通过对数据集在不同层次的划分,构造出树状结构的聚类结果实现方法:聚合方法、分裂方法实现方法方向步骤描述经典算法聚合方法自底向上首先,每个样本自成一簇;然后,开始迭代,每......
  • Python二级专项考点(原码、补码、反码)
    以下内容皆为本人原创,制作实属不易,请各位帅锅、镁铝点点赞赞和关注。OK,正片开始了一.定义(通俗易懂版)原码:原码是最直观的表示方法,它直接用二进制表示数值,最高位作为符号位,0表示正数,1表示负数。剩下的位表示数值本身。例如,十进制的+5在原码表示为00000101,-5则表示为100001......
  • D46 2-SAT+线段树优化+二分 [ARC069F] Flags
    视频链接: [ARC069F]Flags-洛谷|计算机科学教育新生态(luogu.com.cn)//D462-SAT+线段树优化+二分O(nlognlogv)#include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;#definemid((l+r)>>1)#definels(u<<1)#definer......
  • [学习笔记]Python学习3——变量
                    上一篇笔记对Python环境进行了简介,了解了其组成以及相关概念。        公众号端:[学习笔记]Python学习2——Python环境https://mp.weixin.qq.com/s?__biz=MzkwMjc0MTE3Mw==&mid=2247483706&idx=1&sn=b0904c6b019c0a010fd85ab992efc......
  • Python安装(2024)
                    在之前的笔记中,介绍了Python环境。    CSDN端:Python环境https://blog.csdn.net/m0_61009360/article/details/141216455        公众号端:Python环境https://mp.weixin.qq.com/s?__biz=MzkwMjc0MTE3Mw==&mid=2247483706&idx......
  • 三剑客详解
    一、grep基本使用语法结构:模糊过滤查找内容grep'查找的内容'filecatfile|grep'查找屏幕上输出的内容'参考选项:r:递归过滤文件的内容v:取反w:过滤单词,以空格分割,精确匹配i:不区分大小写n:过滤到内容的具体行号c:统计单词次数o:查看匹配过程E:支持扩展正则A:显示查找内容......
  • 指针详解(二)
    目录1. const修饰指针1)const修饰变量2)const修饰指针变量2. 指针运算1)指针+- 整数2)指针-指针3)指针的关系运算3. 野指针1)野指针成因2)规避野指针4.assert断言5. 指针的使用和传址调用1)strlen的模拟实现2)传值调用和传址调用1. const修饰指针1)const修饰......
  • Redis 数据类型详解
    Redis是一个开源的内存数据结构存储系统,广泛应用于缓存、消息队列、实时数据分析等场景。Redis提供了多种数据类型,本文将详细介绍Redis的五种主要数据类型及其应用场景,并从概述、基本操作、应用场景和数据结构等方面进行深入探讨。1.字符串(String)概述字符串是Redis......