折半查找递归算法Python
时间: 2023-11-19 21:52:13 浏览: 173
折半查找是一种常见的查找算法,也称为二分查找。它的基本思想是将有序数组分成两部分,通过比较中间元素和目标元素的大小关系,来确定目标元素在哪一部分中,然后再在该部分中继续查找,直到找到目标元素或者确定目标元素不存在为止。而递归实现折半查找算法,就是将查找过程分成两个子问题,分别在左半部分和右半部分中递归查找,直到找到目标元素或者确定目标元素不存在为止。
下面是折半查找递归算法的Python实现:
```
def binary_search_recursive(arr, low, high, target):
if high >= low:
mid = (high + low) // 2
if arr[mid] == target:
return mid
elif arr[mid] > target:
return binary_search_recursive(arr, low, mid - 1, target)
else:
return binary_search_recursive(arr, mid + 1, high, target)
else:
return -1
```
其中,`arr`是有序数组,`low`和`high`分别是数组的起始下标和结束下标,`target`是要查找的目标元素。如果找到了目标元素,则返回其下标;否则返回-1。
相关问题
折半查找递归算法代码
折半查找递归算法在给定有序数组`arr`中查找目标值`target`的过程如下:
```python
def binary_search_recursion(arr, target, low, high):
"""
递归版本的折半查找
:param arr: 排序后的整数数组
:param target: 要查找的目标值
:param low: 数组下界的索引
:param high: 数组上界的索引
:return: 目标值的索引(如果找到),否则返回-1
"""
if low > high: # 当搜索范围为空时,表示未找到目标值
return -1
mid = (low + high) // 2 # 计算中间位置
if arr[mid] == target: # 如果找到目标值,直接返回索引
return mid
elif arr[mid] < target: # 如果中间值小于目标,缩小左半部分的搜索范围
return binary_search_recursion(arr, target, mid + 1, high)
else: # 否则,缩小右半部分的搜索范围
return binary_search_recursion(arr, target, low, mid - 1)
# 示例用法
arr = [1, 3, 5, 7, 9]
target = 5
result = binary_search_recursion(arr, target, 0, len(arr) - 1)
if result != -1:
print(f"元素 {target} 的索引是:{result}")
else:
print(f"{target} 不在数组中")
```
折半查找的递归算法和非递归算法
折半查找也叫二分查找,是一种在有序数组中查找特定元素的高效搜索算法。它的基本思想每次都将查找范围缩小一半,直到找到目标值或确定其不存在。
**递归算法**:
```python
def binary_search_recursive(arr, target, low, high):
if low > high:
return -1 # 如果范围为空,返回-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 = [1, 3, 5, 7, 9]
target = 5
result = binary_search_recursive(arr, target, 0, len(arr)-1)
```
**非递归算法**(也称为迭代算法):
```python
def binary_search_iterative(arr, target):
low = 0
high = len(arr) - 1
while low <= high:
mid = (low + high) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1
# 使用示例
arr = [1, 3, 5, 7, 9]
target = 5
result = binary_search_iterative(arr, target)
```
阅读全文