欢迎访问宙启技术站
智能推送

使用Python实现二分搜索函数

发布时间:2023-07-02 10:49:09

二分搜索算法也被称为折半查找,是一种高效的搜索算法。它的核心思想是将已排序的数组一分为二,然后与目标值进行比较,根据比较结果确定继续搜索的方向。如果目标值等于中间值,则搜索结束;如果目标值小于中间值,则继续在左半部分数组中搜索;如果目标值大于中间值,则在右半部分数组中搜索。如此循环进行,直到找到目标值或者确定目标值不在数组中。

下面是使用Python实现二分搜索函数的代码:

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

在这段代码中,binary_search函数接受两个参数:nums是已排序的数组,target是需要查找的目标值。它使用了两个指针leftright,初始时分别指向数组的 个元素和最后一个元素。然后使用一个循环,不断将数组一分为二,并进行比较,直到找到目标值或者确定目标值不在数组中。

循环中的关键步骤是计算中间值mid,可以使用整数除法//来确保得到整数索引。然后比较中间值与目标值的大小关系,如果相等则返回中间值的索引,如果中间值小于目标值则更新left指针为mid + 1,否则更新right指针为mid - 1。这样不断缩小搜索范围,直到找到目标值或者搜索范围为空。

如果循环结束后仍然没有找到目标值,则返回-1表示目标值不存在于数组中。

可以使用以下代码来测试二分搜索函数:

nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
target = 5
index = binary_search(nums, target)
if index != -1:
    print(f"目标值 {target} 在数组中的索引为 {index}")
else:
    print(f"目标值 {target} 不存在于数组中")

在这个例子中,目标值5存在于数组中,二分搜索函数会返回5的索引2。输出结果为:

目标值 5 在数组中的索引为 2

二分搜索算法的时间复杂度为O(log n),其中n是数组的元素个数。这是一种非常高效的算法,特别适用于大型数组的查找操作。