pyton模拟二分法查找
时间: 2023-09-27 11:02:41 浏览: 102
Python实现的数据结构与算法之基本搜索详解
二分法是一种非常高效的查找算法。它适用于有序列表,并将列表分成两部分,每次查找都将目标值与列表中间元素进行比较。如果目标值大于中间元素,则在中间元素的右侧继续查找;如果目标值小于中间元素,则在中间元素的左侧继续查找。通过重复这个过程,最终可以找到目标值。
在Python中模拟二分法查找可以通过递归或迭代两种方式实现。下面是一个用递归方式实现的例子:
```python
def binary_search_recursive(arr, target, low, high):
if low > high:
return -1
mid = (low + high) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
return binary_search_recursive(arr, target, mid + 1, high)
else:
return binary_search_recursive(arr, target, low, mid - 1)
```
这个函数接受四个参数:有序列表(arr),目标值(target),低索引(low)和高索引(high)。初始化时,将低索引设置为列表的开始位置,将高索引设置为列表的结束位置。然后,计算中间索引(mid)。
接下来,我们检查中间元素是否等于目标值。如果是,则返回中间索引。如果不是,则我们根据目标值与中间元素的大小关系更新low和high,并通过递归调用函数进行下一步的查找。
使用该函数可以找到目标值在有序列表中的索引,如果没有找到则返回-1。以下是一个示例:
```python
arr = [1, 3, 5, 7, 9]
target = 5
result = binary_search_recursive(arr, target, 0, len(arr) - 1)
if result != -1:
print("目标值在列表中的索引为:", result)
else:
print("目标值不在列表中")
```
输出为"目标值在列表中的索引为: 2",因为5在列表中的索引为2。
这是一个简单的使用Python模拟二分法查找的例子。通过递归或迭代,我们可以更高效地在有序列表中查找目标值。
阅读全文