返回
二分查找:20 分钟掌握的快速搜索算法
前端
2023-12-05 02:52:35
二分查找是一种非常高效的搜索算法,其时间复杂度为 O(log n)。它适用于已排序的数组或链表,通过不断地将搜索范围折半来快速找到目标元素。
二分查找的原理
二分查找的原理非常简单。假设我们有一个已经排序好的数组 arr,其中包含 n 个元素。我们首先将数组的中间元素 arr[n/2] 与目标元素 target 进行比较。如果 arr[n/2] 等于 target,那么我们就找到了目标元素。如果 arr[n/2] 小于 target,那么目标元素一定在 arr[n/2+1] 到 arr[n-1] 之间。如果 arr[n/2] 大于 target,那么目标元素一定在 arr[0] 到 arr[n/2-1] 之间。
根据比较结果,我们将数组的搜索范围缩小到一半。然后,我们继续对新的搜索范围执行二分查找,直到找到目标元素或搜索范围为空。
二分查找的步骤
- 首先,将数组的中间元素 arr[n/2] 与目标元素 target 进行比较。
- 如果 arr[n/2] 等于 target,那么我们就找到了目标元素。
- 如果 arr[n/2] 小于 target,那么目标元素一定在 arr[n/2+1] 到 arr[n-1] 之间。
- 如果 arr[n/2] 大于 target,那么目标元素一定在 arr[0] 到 arr[n/2-1] 之间。
- 根据比较结果,我们将数组的搜索范围缩小到一半。
- 然后,我们继续对新的搜索范围执行二分查找,直到找到目标元素或搜索范围为空。
二分查找的代码实现
def binary_search(arr, target):
"""
二分查找算法
参数:
arr: 已排序的数组
target: 要查找的目标元素
返回:
目标元素在数组中的索引,如果找不到则返回 -1
"""
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, 11, 13, 15, 17, 19]
target = 11
result = binary_search(arr, target)
if result != -1:
print(f"目标元素 {target} 在数组中的索引为 {result}")
else:
print("目标元素不存在")
二分查找的应用场景
二分查找是一种非常实用的算法,它有广泛的应用场景。例如:
- 在排序好的数组中查找元素
- 在二叉搜索树中查找元素
- 在文件系统中查找文件
- 在数据库中查找记录
- 在网络中查找主机
结语
二分查找是一种非常高效的搜索算法,其时间复杂度为 O(log n)。它适用于已排序的数组或链表,通过不断地将搜索范围折半来快速找到目标元素。二分查找的原理非常简单,易于理解和实现。它在许多应用场景中都有着广泛的应用。