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

在Python中实现二分查找算法。

发布时间:2023-12-04 13:46:35

二分查找算法,也称为折半查找算法,是一种面向有序列表的查找算法。它通过将列表不断地二分,排除一半的数据,逐步接近目标值,直到找到目标值或列表为空。

在Python中,可以通过递归或迭代两种方式实现二分查找算法。

1. 递归实现二分查找算法:

def binary_search_recursive(arr, target):
    # 若列表为空,则表示未找到目标值
    if len(arr) == 0:
        return -1
    
    # 计算列表中间位置的索引
    mid = len(arr) // 2
    
    # 若中间值等于目标值,则直接返回中间索引
    if arr[mid] == target:
        return mid
    
    # 若中间值大于目标值,则在左半部分继续查找
    elif arr[mid] > target:
        return binary_search_recursive(arr[:mid], target)
    
    # 若中间值小于目标值,则在右半部分继续查找
    else:
        result = binary_search_recursive(arr[mid+1:], target)
        return -1 if result == -1 else result + mid + 1

2. 迭代实现二分查找算法:

def binary_search_iterative(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:
            right = mid - 1
        
        # 若中间值小于目标值,则在右半部分继续查找
        else:
            left = mid + 1
    
    return -1

以下是使用例子:

arr = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
target = 9

# 递归实现二分查找算法
result_recursive = binary_search_recursive(arr, target)
if result_recursive != -1:
    print(f"目标值 {target} 在列表中的索引为 {result_recursive}")
else:
    print("目标值不在列表中")

# 迭代实现二分查找算法
result_iterative = binary_search_iterative(arr, target)
if result_iterative != -1:
    print(f"目标值 {target} 在列表中的索引为 {result_iterative}")
else:
    print("目标值不在列表中")

输出结果为:

目标值 9 在列表中的索引为 4
目标值 9 在列表中的索引为 4

以上是在Python中实现二分查找算法的方法和使用例子,希望能对你有所帮助。