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

二分查找法是一种在有序数组中查找特定元素的高效算法,时间复杂度为 O(log n)。它通过不断将搜索区间
一分为二来缩小目标值的可能位置。
基本思路
二分查找的前提是数组已经排序。算法维护两个指针 left 和 right,表示当前搜索范围的边界。每次比较中间元素 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电子商城
在现实生活中的购物过程,购物者需要先到商场,找到指定的产品柜台下,查看产品实体以及标价信息,如果产品合适,就将该产品放到购物车中,到收款处付款结算。电子商务网站通过虚拟网页的形式在计算机上摸拟了整个过程,首先电子商务设计人员将产品信息分类显示在网页上,用户查看网页上的产品信息,当用户看到了中意的产品后,可以将该产品添加到购物车,最后使用网上支付工具进行结算,而货物将由公司通过快递等方式发送给购物者
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运行时类型识别用法


2025-11-27
浏览次数:次
返回列表