【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。
代码解释
初始化指针:
- 定义两个指针
left
和right
,分别指向数组的起始位置和结束位置。
循环条件:
- 使用
while left <= right
作为循环条件,确保查找范围有效。
计算中间索引:
- 使用
(left + right) // 2
计算中间索引mid
。
比较中间值:
-
如果
arr[mid] == target