你能编写一个算法来使用二进制搜索在排序数组中查找元素吗?


当在排序数组中查找元素时,使用二进制搜索算法(也称为二分查找算法)是一种高效的方法。以下是一个简单的 Python 实现:

pythonCopy codedef binary_search(arr, target):
    """
    在排序数组arr中查找target,返回其下标。如果找不到,则返回-1。
    """
    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

在这个算法中,我们使用两个指针 leftright 来跟踪我们搜索的范围。一开始,left 指向数组的第一个元素,right 指向数组的最后一个元素。然后,我们将 mid 指针设置为左右指针的中点,并将目标元素与中点元素进行比较。如果它们相等,我们已经找到了目标元素,并返回中点的索引。如果目标元素大于中点元素,那么我们只需要在右侧的子数组中继续搜索,因此将左指针移动到中点后面的一个位置。否则,如果目标元素小于中点元素,那么我们只需要在左侧的子数组中继续搜索,因此将右指针移动到中点前面的一个位置。我们在每次循环中重复以上步骤,直到找到目标元素或搜索范围缩小为空,返回-1。


原文链接:codingdict.net