📅  最后修改于: 2023-12-03 15:21:39.692000             🧑  作者: Mango
二分查找也称为折半查找,是一种高效的查找算法,它仅适用于有序的数据结构(如有序数组)。
二分查找算法的原理是不断地将查找范围缩小一半,直到找到目标元素或查找范围为空。
确定左右边界,$left$ 和 $right$ 分别为查找范围的左边界和右边界;
计算中点位置 $mid$,并将中点元素 $pivot$ 与目标元素 $target$ 进行比较;
如果 $pivot$ 大于 $target$,则目标元素必然在左侧,将查找范围缩小到 $[left, mid - 1]$ 区间内;
如果 $pivot$ 小于 $target$,则目标元素必然在右侧,将查找范围缩小到 $[mid + 1, right]$ 区间内;
如果 $pivot$ 等于 $target$,则直接返回 mid。
重复步骤 2 ~ 5 直到找到目标元素或查找范围为空。
下面是二分查找的示意图:
以下是 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
上述程序接收两个参数:$arr$ 表示有序数组,$target$ 表示要查找的目标元素。
程序先确定数组的左右边界,然后根据中点位置 $mid$ 计算出 $pivot$ 的值,再根据 $pivot$ 和 $target$ 的大小关系缩小查找范围。
如果找到目标元素,则返回其下标;否则返回 $-1$。
在一个有 n 个元素的数组中,二分查找最多需要执行 $log_2n$ 次。
因此,二分查找的时间复杂度可以表示为 $O(log_2n)$。
二分查找是一种高效的查找算法,仅适用于有序的数据结构(如有序数组)。
Python 实现的二分查找程序可以使用 while 循环和递归两种方法实现。
二分查找的时间复杂度为 $O(log_2n)$,是一种快速有效的查找算法。