📜  二元搜寻(1)

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

二元搜寻

二元搜寻,也称为二分搜寻,是常用于查找排序数组中元素的算法。它的时间复杂度为 O(logn),比线性查找方法更高效。

原理

二元搜寻算法的基本思想是:将数组从中间开始分成两半,如果中间元素大于要查找的元素,则在左半部分查找;如果中间元素小于要查找的元素,则在右半部分查找;如果相等,则直接返回中间下标。不断重复上述过程,直到找到或者未找到目标元素。

实现

二元搜寻可以用递归或非递归的方式实现。以下是用非递归的方式实现二元搜寻的 Python 代码示例:

def binary_search(arr, target):
    left = 0
    right = 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 表示目标元素,leftright 分别表示数组的左右边界。在代码中,我们不断将搜索区间缩小至左半部分、右半部分或者找到目标元素为止。

总结

二元搜寻是一种高效的查找算法,它的时间复杂度为 O(logn)。我们可以用递归或非递归的方式实现。在实现过程中,需要确认数组的左右边界,以及如何缩小搜索区间。