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

在Python中实现二分查找函数

发布时间:2023-07-30 20:30:46

二分查找(Binary Search)是一种查找算法,它通过将待查找的数据元素不断地与数组的中间元素进行比较,从而将查找范围逐渐缩小,直到找到目标元素或确定目标元素不存在为止。二分查找算法的时间复杂度为 O(logn)。

在Python中实现二分查找函数,可以分为迭代实现和递归实现两种方式。

1. 迭代实现二分查找函数

def binary_search_iterative(arr, target):
    low = 0
    high = len(arr) - 1
    
    while low <= high:
        mid = (low + high) // 2
        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            low = mid + 1
        else:
            high = mid - 1
    
    return -1

上述代码中,使用lowhigh表示待查找范围的左右边界,通过循环不断将target与中间元素进行比较,并根据比较结果更新左右边界。如果找到了目标元素target,则返回其索引;如果没有找到目标元素,则返回 -1。

2. 递归实现二分查找函数

def binary_search_recursive(arr, target, low, high):
    if low > high:
        return -1
    
    mid = (low + high) // 2
    if arr[mid] == target:
        return mid
    elif arr[mid] < target:
        return binary_search_recursive(arr, target, mid + 1, high)
    else:
        return binary_search_recursive(arr, target, low, mid - 1)

以上代码为递归实现版本,通过递归调用自身来不断缩小查找范围,并最终找到目标元素或确定其不存在。

使用二分查找函数时,需要确保待查找的数组是有序的。如果数组无序,可以先对其进行排序。

下面是一个使用二分查找函数的例子:

arr = [2, 5, 8, 12, 16, 23, 38, 56, 72, 91]
target = 16

index_iterative = binary_search_iterative(arr, target)
index_recursive = binary_search_recursive(arr, target, 0, len(arr) - 1)

if index_iterative != -1:
    print(f"迭代查找:目标元素 {target} 的索引为:{index_iterative}")
else:
    print(f"迭代查找:目标元素 {target} 不存在")

if index_recursive != -1:
    print(f"递归查找:目标元素 {target} 的索引为:{index_recursive}")
else:
    print(f"递归查找:目标元素 {target} 不存在")

以上代码首先定义了一个有序数组arr,然后调用二分查找函数进行查找,使用两种方式分别实现并打印目标元素的索引或不存在的提示信息。

总结:

本文介绍了在Python中实现二分查找函数的两种方式:迭代实现和递归实现。无论哪种方式,都需要保证待查找的数组是有序的。使用二分查找的时间复杂度为 O(logn),是一种高效的查找算法。