> 二分查找算法详解
详细解析二分查找算法的原理、实现和应用场景。
算法原理
二分查找是一种在有序数组中查找特定元素的搜索算法。
时间复杂度
- 最佳情况:O(1)
- 平均情况:O(log n)
- 最坏情况:O(log n)
Python 实现
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while 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 # 未找到
递归实现
def binary_search_recursive(arr, target, left=0, right=None):
if right is None:
right = len(arr) - 1
if left > right:
return -1
mid = (left + right) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
return binary_search_recursive(arr, target, mid + 1, right)
else:
return binary_search_recursive(arr, target, left, mid - 1)
变种应用
- 寻找第一个/最后一个满足条件的元素
- 寻找插入位置
- 在旋转数组中搜索