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

Python中如何使用函数对已排序的列表进行二分查找?

发布时间:2023-06-30 14:57:05

在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:
            right = mid - 1
        
        # 如果目标值大于中间值,向右半边继续查找
        else:
            left = mid + 1

    # 如果没有找到目标值,则返回 -1
    return -1

这里的 arr 是已排序的列表,target 是需要查找的目标值。算法使用 leftright 两个指针来界定搜索范围,并且通过不断更新指针的位置来逐步缩小搜索范围,直到找到目标值或者确定目标值不在列表中。

最开始,将 left 设置为列表的 个索引,将 right 设置为列表的最后一个索引。然后,根据中间索引 mid 来判断目标值与中间值的关系。如果相等,则找到了目标值并返回其索引;如果目标值小于中间值,说明目标值在左半边,因此将 right 指针更新为 mid - 1;如果目标值大于中间值,说明目标值在右半边,因此将 left 指针更新为 mid + 1。之后,循环进行这个过程,直到找到目标值或者搜索范围为空。

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

以下是一个示例使用该二分查找函数的代码:

arr = [1, 3, 5, 7, 9, 11]
target = 9

result = binary_search(arr, target)

if result != -1:
    print(f"目标值 {target} 的索引为 {result}")
else:
    print(f"目标值 {target} 不存在于列表中")

输出:

目标值 9 的索引为 4

这是一个简单的二分查找算法实现,可以在已排序的列表中快速查找指定的目标值。但是需要注意的是,该算法仅适用于有序的列表,否则可能无法正确工作。