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

Python函数如何实现二分查找算法?

发布时间:2023-07-06 05:15:33

二分查找算法(Binary Search Algorithm)也被称为折半查找算法,是一种在有序数组中查找目标元素的高效算法。其基本思想是通过每次将查找区间分成两部分,通过比较目标元素与中间元素的大小关系,确定目标元素在哪一部分,并继续在该部分进行查找,直到找到目标元素或者确定目标元素不存在。

下面是使用Python语言实现二分查找算法的示例代码:

def binary_search(arr, target):
    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  # 目标元素不存在

# 测试示例
arr = [1, 3, 5, 7, 9, 11, 13, 15]
target = 9
result = binary_search(arr, target)
if result != -1:
    print(f"目标元素 {target} 在数组中的索引为 {result}")
else:
    print(f"目标元素 {target} 不存在")

在上述代码中,我们定义了一个名为binary_search的函数,该函数接受两个参数:有序的数组arr和目标元素target。初始时,设置左边界left为数组的 个元素的索引,右边界right为数组的最后一个元素的索引。然后,在每次循环中,将查找区间分成两部分,通过比较目标元素与中间元素的大小关系来缩小查找范围。

如果中间元素与目标元素相等,则找到目标元素,返回其索引。如果中间元素小于目标元素,则说明目标元素在中间元素的右边部分,因此将左边界left更新为mid + 1,进行下一轮查找。如果中间元素大于目标元素,则说明目标元素在中间元素的左边部分,因此将右边界right更新为mid - 1,进行下一轮查找。

当左边界left大于右边界right时,表示找不到目标元素,返回-1。

最后,我们通过调用binary_search函数来测试示例。在上述示例中,将目标元素设置为9,在数组中找到了目标元素,并输出结果。

需要注意的是,二分查找算法要求有序数组,如果数组是无序的,则需要先对数组进行排序。同时,该算法也可以处理重复元素。如果数组中存在多个值相等的目标元素,该算法会返回其中一个的索引。如果要找到全部的目标元素的索引,则需要稍作修改。