📜  ricerca binaria algoritmo (1)

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

二分查找算法

二分查找算法(Binary Search Algorithm)是一种在有序数组或列表中查找特定元素的搜索算法。该算法通过不断将待查找区间进行折半的方式来缩小查找范围,直到找到目标元素或是确定目标元素不存在于数组中。

实现思路

二分查找算法的实现思路类似于“猜数字”游戏,我们需要不断地根据猜测结果缩小答案所在的范围,直至得到正确答案或者确定答案不在搜索区间内。具体实现方式如下:

  1. 初始化左右端点指针 left 和 right,分别指向数组的左右端点。
  2. 计算中间位置 mid,根据 mid 与目标元素的大小关系,决定搜索区间的进一步缩小方向。
  3. 如果目标元素等于当前位置元素,则找到目标元素,返回当前位置下标。
  4. 如果目标元素小于当前位置元素,则在左半边区间继续查找。
  5. 如果目标元素大于当前位置元素,则在右半边区间继续查找。
  6. 重复步骤 2~5,直到找到目标元素或者确认其不存在于数组中。
代码实现
def binary_search(array, target):
    left, right = 0, len(array) - 1  # 初始化左右端点指针
    while left <= right:
        mid = (left + right) // 2  # 计算中间位置
        if array[mid] == target:   # 目标元素等于当前位置元素
            return mid
        elif array[mid] > target:  # 目标元素小于当前位置元素
            right = mid - 1
        else:                      # 目标元素大于当前位置元素
            left = mid + 1
    return -1  # 目标元素不存在于数组中
复杂度分析

二分查找算法的时间复杂度为 O(log n),其中 n 为数组大小。每次查找过程都会将搜索区间缩小一半,因此总共最多需要查找 log n 次,即可找到目标元素或是确认其不存在于数组中。该算法的空间复杂度为 O(1),由于每次查找只需要使用常数级别的额外空间。