当前位置: 首页 > news >正文

【Python练习】037. 编写一个函数,实现二分查找算法

037. 编写一个函数,实现二分查找算法

  • 037. 编写一个函数,实现二分查找算法
    • 示例代码
      • 运行结果
      • 代码解释
    • 扩展:递归实现
      • 注意事项
    • 实现方法
      • 递归实现二分查找
      • 迭代实现二分查找
      • 使用bisect模块实现
      • 查找第一个出现的位置
      • 查找最后一个出现的位置

037. 编写一个函数,实现二分查找算法

二分查找算法是一种高效的查找算法,适用于在有序数组中查找特定元素。其基本思想是通过不断将数组分为两半,逐步缩小查找范围,直到找到目标元素或确定目标元素不存在。

示例代码

def binary_search(arr, target):"""使用二分查找算法在有序数组 arr 中查找目标值 target。参数:arr (list): 有序数组。target (int): 要查找的目标值。返回:int: 如果找到目标值,返回其在数组中的索引;否则返回 -1。"""left, right = 0, len(arr) - 1while 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  # 未找到目标值# 测试代码
sorted_array = [1, 3, 5, 7, 9, 11, 13, 15]
target_value = 9result = binary_search(sorted_array, target_value)if result != -1:print(f"目标值 {target_value} 在数组中的索引为 {result}。")
else:print(f"目标值 {target_value} 不在数组中。")

运行结果

运行上述代码后,输出如下:

目标值 9 在数组中的索引为 4。

代码解释

初始化指针

  • 定义两个指针 leftright,分别指向数组的起始位置和结束位置。

循环条件

  • 使用 while left <= right 作为循环条件,确保查找范围有效。

计算中间索引

  • 使用 (left + right) // 2 计算中间索引 mid

比较中间值

  • 如果 arr[mid] == target

http://www.dtcms.com/a/274818.html

相关文章:

  • 你见过的最差的程序员是怎样的?
  • VOB如何转换成MP4格式?3种快速转换教程推荐
  • (LeetCode 面试经典 150 题 ) 15. 三数之和 (排序+双指针)
  • UML 图类型全解析:结构图与行为图分类详解
  • 拼多多电商运营技巧---补坑产经验
  • 软件测试(白盒测试)
  • 用FunctionCall实现文件解析(二):创建单例客户端
  • 2025亚太中文赛项 B题疾病的预测与大数据分析保姆级教程思路分析
  • JVM方法区的运行时常量区到底存储哪些数据?
  • 【南金研CAN数采仪助力福田祥菱 QEV车型售后问题处理
  • 制作 ext4 文件系统
  • java 导入利用布隆BloomFilter
  • SSE事件流简单示例
  • Paimon 写入磁盘文件名字生成机制
  • 2025年NSSCTF-青海民族大学 2025 新生赛WP
  • 学习C++、QT---20(C++的常用的4种信号与槽、自定义信号与槽的讲解)
  • 动力系统模拟与推导-AI云计算数值分析和代码验证
  • BLE低功耗设计:从广播模式到连接参数优化的全链路分析与真题解析
  • Django母婴商城项目实践(一)
  • 【JMeter】接口加密
  • 蜗轮丝杆升降机拆装图
  • 在多个DHCP服务器的网络环境中选择指定的DHCP服务
  • Windows GNU Radio避坑
  • 深入探究编程拷贝
  • mysql的性能优化:组提交、数据页复用、全表扫描优化、刷脏页
  • Vue 表单开发避坑指南:从响应式数据到动态规则的实践总结
  • Go 编译报错排查:vendor/golang.org/x/crypto/cryptobyte/asn1 no Go source files
  • Java外包怎么选?这几点不注意,项目可能血亏!
  • day21——特殊文件:XML、Properties、以及日志框架
  • Linux中geoserver中文乱码