📜  二分查找python(1)

📅  最后修改于: 2023-12-03 15:21:39.692000             🧑  作者: Mango

二分查找 Python

二分查找也称为折半查找,是一种高效的查找算法,它仅适用于有序的数据结构(如有序数组)。

原理

二分查找算法的原理是不断地将查找范围缩小一半,直到找到目标元素或查找范围为空。

  1. 确定左右边界,$left$ 和 $right$ 分别为查找范围的左边界和右边界;

  2. 计算中点位置 $mid$,并将中点元素 $pivot$ 与目标元素 $target$ 进行比较;

  3. 如果 $pivot$ 大于 $target$,则目标元素必然在左侧,将查找范围缩小到 $[left, mid - 1]$ 区间内;

  4. 如果 $pivot$ 小于 $target$,则目标元素必然在右侧,将查找范围缩小到 $[mid + 1, right]$ 区间内;

  5. 如果 $pivot$ 等于 $target$,则直接返回 mid。

  6. 重复步骤 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)$,是一种快速有效的查找算法。