📜  二元搜寻(1)

📅  最后修改于: 2023-12-03 14:49:00.938000             🧑  作者: Mango

二元搜寻(Binary Search)

二元搜寻又称二分搜寻,是一种在有序数组中寻找某一特定元素的搜索算法。其基本思想是:首先确定该元素可能存放的区间,然后不断缩小该区间直到找到该元素,或者确定该元素不存在于数组中。

二元搜寻算法的时间复杂度是O(log n),相比于暴力搜索算法,其时间复杂度更低,更加高效。因此,在实际的开发工作中,二元搜寻算法是一种非常有用的算法。

算法流程
  1. 初始化左边界left和右边界right,分别为数组起始位置和结束位置。
  2. 计算中间位置mid,即mid = (left + right) / 2,取整数部分。
  3. 判断中间位置的元素值是否等于目标值target
    1. 如果等于,直接返回mid
    2. 如果不等于,根据中间位置的元素大小关系,缩小区间:
      • 如果mid位置元素值大于target,则缩小搜索区间为左半部分,将right更新为mid - 1
      • 如果mid位置元素值小于target,缩小搜索区间为右半部分,将left更新为mid + 1
  4. 如果整个数组都被搜索完毕,则说明目标值不在数组中,返回-1。
代码示例
def binary_search(nums, target):
    left, right = 0, len(nums) - 1
    while left <= right:
        mid = (left + right) // 2
        if nums[mid] == target:
            return mid
        elif nums[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    return -1
结论

二元搜寻算法是一种非常高效的搜索算法,可以在对数时间复杂度内找到一个有序数组中的特定元素。但需要注意,二元搜寻算法只适用于有序的数组。因此,在应用该算法时,需要预先将数组进行排序。