请列出各类二分查找算法模板
时间: 2024-09-16 22:01:16 浏览: 63
二分查找算法是一种在有序数组中查找特定元素的有效搜索技术。它的基本思想是每次将数组分成两半,然后比较中间元素与目标值的关系,从而决定是在左半部分还是右半部分继续查找。以下是几种常见的二分查找算法模板:
1. **顺序查找** (Linear Search) - 这不是严格的二分查找,但对于无序数组,它是最基础的查找方法。从头到尾逐个比较每个元素。
```python
def binary_search_unsorted(arr, target):
for i in range(len(arr)):
if arr[i] == target:
return i
return -1
```
2. **标准二分查找** (Binary Search) - 适用于已排序数组。
```python
def binary_search_sorted(arr, target):
low = 0
high = len(arr) - 1
while low <= high:
mid = (low + high) // 2
if arr[mid] < target:
low = mid + 1
elif arr[mid] > target:
high = mid - 1
else:
return mid
return -1
```
3. **递归版本** - 使用递归实现二分查找。
```python
def recursive_binary_search(arr, target, low=None, high=None):
if low is None:
low = 0
high = len(arr) - 1
if low > high:
return -1
mid = (low + high) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
return recursive_binary_search(arr, target, mid+1, high)
else:
return recursive_binary_search(arr, target, low, mid-1)
```
4. **迭代版本** - 更简洁的循环形式,避免了递归带来的栈空间消耗。
```python
def iterative_binary_search(arr, target):
low, high = 0, 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
```
阅读全文