返回

用二分查找法来快速找到目标

前端





**二分查找的原理** 

二分查找的原理很简单,它利用了有序数组的特点,每次将数组一分为二,并比较目标元素与中间元素的大小,如果目标元素小于中间元素,则目标元素一定在数组的前半部分,否则一定在数组的后半部分。以此类推,不断缩小搜索范围,直到找到目标元素或确定目标元素不存在。

**二分查找的实现步骤** 

1. 定义一个函数,接收两个参数:有序数组nums和目标值target。
2. 计算数组的长度n。
3. 定义两个指针,分别指向数组的第一个元素和最后一个元素。
4. 循环执行以下步骤:
    * 计算中间元素的下标mid = (left + right) // 2。
    * 比较中间元素与目标值的大小。
    * 如果中间元素等于目标值,则返回mid。
    * 如果中间元素小于目标值,则将left更新为mid + 1。
    * 如果中间元素大于目标值,则将right更新为mid - 15. 如果循环结束,则目标值不存在,返回-1。

**二分查找的代码示例** 

```python
def binary_search(nums, target):
    """
    二分查找算法

    Args:
    nums: 有序数组
    target: 目标值

    Returns:
    如果找到目标值,则返回其下标,否则返回-1
    """

    left = 0
    right = 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


if __name__ == "__main__":
    nums = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
    target = 11

    result = binary_search(nums, target)

    if result == -1:
        print("目标值不存在")
    else:
        print("目标值的下标是:", result)

二分查找的时间复杂度

二分查找的时间复杂度为O(log n),其中n是数组的长度。这是因为二分查找每次将数组一分为二,因此搜索范围缩小一半。因此,最坏情况下,二分查找需要log n次比较即可找到目标元素或确定目标元素不存在。

二分查找的应用场景

二分查找算法广泛应用于各种场景,例如:

  • 在数据库中查找记录
  • 在文件系统中查找文件
  • 在内存中查找数据
  • 在数组中查找元素
  • 在链表中查找节点

总结

二分查找是一种快速查找算法,可以快速找到有序数组中的目标元素。二分查找的时间复杂度为O(log n),这使得它非常适合在大量数据中查找目标元素。二分查找算法广泛应用于各种场景,例如数据库、文件系统、内存和数组等。