二分查找算法是一种在有序数组中查找特定元素的搜索算法。它通过将搜索区间分成两半,然后根据目标值与中间值的关系决定搜索区间的下一步范围,从而逐步缩小搜索范围,直到找到目标值或确定不存在。
算法步骤
- 确定搜索区间为
low
和high
,初始时low
为数组的第一个索引,high
为数组的最后一个索引。 - 计算中间索引
mid = (low + high) / 2
。 - 比较中间值与目标值:
- 如果中间值等于目标值,则返回中间索引。
- 如果中间值大于目标值,则将搜索区间缩小到数组的左半部分,即将
high
设置为mid - 1
。 - 如果中间值小于目标值,则将搜索区间缩小到数组的右半部分,即将
low
设置为mid + 1
。
- 重复步骤 2 和 3,直到找到目标值或
low
大于high
。
代码示例
def binary_search(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:
high = mid - 1
else:
low = mid + 1
return -1
应用场景
二分查找算法适用于有序数组,在查找效率较高的场景下非常有用。例如,在文件系统中查找文件、在数据库中查找记录等。