新闻中心

在python中二分查找法实现

2025-11-27
浏览次数:
返回列表
二分查找法在有序数组中高效查找目标值,时间复杂度为 O(log n)。通过维护 left 和 right 指针确定搜索范围,每次比较中间元素与目标值,相等则返回下标,中间值小则调整 left,大则调整 right,循环直至找到目标或范围为空。非递归实现使用 while 循环,递归实现需传递边界参数,调用时需确保数组有序,注意 mid 计算方式及循环条件 left ≤ right。

在python中二分查找法实现

二分查找法是一种在有序数组中查找特定元素的高效算法,时间复杂度为 O(log n)。它通过不断将搜索区间一分为二来缩小目标值的可能位置。

基本思路

二分查找的前提是数组已经排序。算法维护两个指针 leftright,表示当前搜索范围的边界。每次比较中间元素 mid = (left + right) // 2 与目标值:

  • 如果中间值等于目标,返回下标
  • 如果中间值小于目标,说明目标在右半部分,调整 left
  • 如果中间值大于目标,说明目标在左半部分,调整 right

重复这个过程直到找到目标或搜索范围为空。

非递归实现

def binary_search(arr, target):
    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  # 未找到

使用示例:

ASP.NET 4.0电子商城 ASP.NET 4.0电子商城

在现实生活中的购物过程,购物者需要先到商场,找到指定的产品柜台下,查看产品实体以及标价信息,如果产品合适,就将该产品放到购物车中,到收款处付款结算。电子商务网站通过虚拟网页的形式在计算机上摸拟了整个过程,首先电子商务设计人员将产品信息分类显示在网页上,用户查看网页上的产品信息,当用户看到了中意的产品后,可以将该产品添加到购物车,最后使用网上支付工具进行结算,而货物将由公司通过快递等方式发送给购物者

ASP.NET 4.0电子商城 0 查看详情 ASP.NET 4.0电子商城
nums = [1, 3, 5, 7, 9, 11, 13]
index = binary_search(nums, 7)
print(index)  # 输出 3

递归实现

def binary_search_recursive(arr, target, left, right):
    if left > right:
        return -1
    mid = (left + right) // 2
    if arr[mid] == target:
        return mid
    elif arr[mid] < target:
        return binary_search_recursive(arr, target, mid + 1, right)
    else:
        return binary_search_recursive(arr, target, left, mid - 1)

调用方式:

index = binary_search_recursive(nums, 7, 0, len(nums) - 1)

注意事项

实际使用时注意以下几点:

  • 确保输入数组已排序,否则结果不可靠
  • 计算 mid 时用 (left + right) // 2 防止整数溢出(Python 中一般不用太担心)
  • 循环条件是 left ,避免漏掉最后一个元素
  • 没找到时返回 -1 是常见约定

基本上就这些,写起来不复杂但容易在边界处理上出错,多测试几个用例更稳妥。

以上就是在python中二分查找法实现的详细内容,更多请关注其它相关文章!


# 组播  # 南沙定制型网站推广代理  # 外贸网站优化哪个公司好  # Seosem和seo  # 苏州专业网站seo推广公司  # 东莞快速网站建设报价  # 石排石龙网站建设  # 合肥市建设通网站  # 白石桥网站建设推广方案  # 菏泽网站关键词排名优化  # 海外品牌视频网站推广  # 几个  # python  # 组中  # 为空  # 源代码  # 如何将  # 数据包  # 将该  # 转换为  # 递归  # elif  # 二分查找 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Excel Power Pivot如何处理XML数据源 构建高级数据模型  在Go Martini框架中高效服务动态生成图像的实践指南  PDO预处理语句中冒号的正确处理:区分SQL函数格式与命名占位符  哔哩哔哩忘记密码了怎么找回_哔哩哔哩密码找回方法  EMS快递官网app_中国邮政速递物流手机客户端  一加 14R 快充无反应_一加 14R 充电优化  win11 Snap Layouts怎么用 Win11窗口布局与分屏多任务高效指南【必学】  解决Python logging 中 datefmt 导致时间戳固定不变的问题  服务端验证_j*ascript输入检查  新三国志曹操传110级星符试炼夏侯渊极难攻略  整合Supabase认证与Django模型:跨模式迁移的解决方案  MAC怎么让Dock栏只显示当前运行的应用_MAC终端命令实现极简Dock栏  在VS Code中配置和运行Dart程序的完整步骤  我的世界官方游戏入口 我的世界官网平台直达链接  mysql密码锁定怎么解锁_mysql密码锁定解锁后修改密码步骤  c++如何使用Catch2编写单元测试_c++简洁易用的BDD风格测试框架  CSS Flexbox与媒体查询:实现响应式布局中元素的并排与堆叠  php源码怎么看淘宝客系统_看php源码淘宝客系统技巧  顺丰快递查单号物流信息 顺丰快递小程序查询入口  《北京人工智能产业白皮书(2025)》发布:全年核心产值预计突破 4500 亿元  深入理解J*a编译器的兼容性选项:从-source到--release  必由学登录入口 必由学官方网站在线访问链接  微信聊天记录怎么加密_微信聊天记录加密方法  夸克浏览器桌面版同步不了书签怎么处理 夸克浏览器跨设备同步异常解决方案  Win10如何开启蓝牙功能_Windows10找不到蓝牙开关解决方法  晋江读书网页版在线登录 晋江读书电脑版官网  C++如何操作注册表_Windows平台下C++读写注册表的API函数详解  mysql如何设置表访问权限_mysql表访问权限配置  天猫2025双十一0点秒杀攻略 天猫爆款抢购时间  Django AJAX 文件上传教程:解决图片无法保存到模型的常见问题  漫蛙2正版漫画站 漫蛙2网页版快速访问入口  Angular Material 垂直步进器:实现底部到顶部排序的教程  AO3同人作品网入口 AO3搜索引擎官网永久地址  Flexbox布局实践:实现粘性导航栏与底部固定页脚  为什么我的微信朋友圈看不到别人的更新_微信朋友圈更新显示异常解决方法  Typer应用中动态命令行参数的解析与处理  如何设置Windows Defender的定时扫描_计划任务实现自动杀毒【安全】  Android Studio计算器C键逻辑错误排查与修复:条件判断优化指南  天猫双十一预售商品怎么退款_天猫双十一预售退款操作指南  单射、满射与双射的关系 一文理清所有逻辑  如何使用J*aScript精确选择并批量修改特定父元素下子链接的样式  CSS Grid如何控制元素对齐_align-items与justify-items组合使用  192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台  《GTA6》开发画面疑似泄露!这次可不是AI了  LINQ to XML为何解析失败? 深入理解C# XDocument的异常处理  CSS实现侧边栏导航项全宽圆角悬停背景效果  Windows7怎么硬盘安装 Windows7提取ISO镜像到非系统盘并运行setup.exe实现硬盘直装【教程】  铁路12306的积分有效期是多久_铁路12306积分有效期说明  J*aScript实现动态背景色下的文本与按钮颜色自适应调整  C++ typeid如何获取类型信息_C++ RTTI运行时类型识别用法 

搜索