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

Python中实现二分查找的函数

发布时间:2023-06-25 23:48:17

二分查找,又称折半查找,是一种高效的查找算法。它的基本思想是将查找区间不断折半,逐步缩小查找范围,直到找到目标值为止。二分查找算法的时间复杂度为O(log n),是一种常用的算法。

Python中实现二分查找的函数,可以在列表中查找指定元素的位置,也可以判断一个元素是否在列表中出现。

下面是Python实现二分查找函数的代码:

def binary_search(arr, target):
    """
    实现二分查找的函数
    :param arr: 有序列表
    :param target: 查找目标值
    :return: 目标值所在的位置,如果没有找到返回-1
    """
    low, high = 0, 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

上述代码中,函数binary_search接受两个参数,一个是有序列表arr,一个是查找目标值target。函数使用两个变量low和high表示查找区间的左右端点。通过不断折半缩小查找区间,最终可以找到目标值的位置。如果目标值不在列表中,函数返回-1。

实现二分查找的关键在于不断缩小查找区间。具体实现中,通过计算中间位置mid,判断目标值在左半边还是右半边,然后更新查找区间的左右边界。

下面是一个例子,展示如何使用上述函数在一个有序列表中查找指定元素的位置。

# 使用二分查找在列表中查找元素的位置
arr = [1, 3, 5, 7, 9]
target = 5
pos = binary_search(arr, target)
print("元素 %d 在列表中的位置是 %d" % (target, pos))

输出结果为:

元素 5 在列表中的位置是 2

上述代码中,arr是一个有序列表,target是要查找的元素。通过调用binary_search函数,可以得到元素在列表中的位置。结果表明,元素5在列表中的位置是2。

除了查找元素的位置,使用二分查找还可以判断一个元素是否在列表中出现。下面是一个例子,展示如何使用上述函数判断一个数是否在一个有序列表中。

# 使用二分查找判断元素是否在列表中出现
arr = [1, 3, 5, 7, 9]
target = 8
pos = binary_search(arr, target)
if pos == -1:
    print("元素 %d 不在列表中出现" % target)
else:
    print("元素 %d 在列表中的位置是 %d" % (target, pos))

输出结果为:

元素 8 不在列表中出现

上述代码中,arr是一个有序列表,target是要查找的元素。通过调用binary_search函数,可以判断元素是否在列表中出现。结果表明,元素8不在列表中出现。

综上所述,Python实现二分查找的函数是一种简单而常用的算法,可以高效地查找一个元素是否在一个有序列表中出现,或者查找指定元素在列表中的位置。可以使用上述函数,快速解决一些常见的查找问题。