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

使用Python实现二分搜索算法的函数?

发布时间:2023-09-12 13:50:31

二分搜索算法,也称为折半搜索算法,是一种在有序数组中查找特定元素的搜索算法。该算法通过不断缩小搜索范围,将复杂度从O(n)降低到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。我们使用两个指针left和right,分别指向数组的开头和结尾。然后,我们进入一个循环,直到left超过right时结束。

在循环中,我们首先计算中间元素的索引mid。如果中间元素正好等于目标元素,我们返回mid。如果中间元素小于目标元素,我们将left更新为mid + 1,继续在数组的右半部分搜索。如果中间元素大于目标元素,我们将right更新为mid - 1,继续在数组的左半部分搜索。

如果循环结束时还没有找到目标元素,我们返回-1表示未找到。

下面是一个示例,演示如何使用该二分搜索函数:

arr = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
target = 12

result = binary_search(arr, target)

if result != -1:
    print("目标元素", target, "的索引是", result)
else:
    print("目标元素", target, "不存在于数组中")

输出结果是:

目标元素 12 的索引是 5

这表明在给定的有序数组中,目标元素12的索引是5。由于二分搜索算法的复杂度是O(logn),因此无论数组有多大,搜索所需的时间都相当短。