Python实现二进制搜索算法
发布时间:2023-12-04 12:33:06
二分搜索算法(也称为二进制搜索算法)是一种在有序数组中查找目标值的常用算法。该算法通过将数组分成两半,然后确定目标值位于哪一半,再继续将该子数组一分为二,直到找到目标值或者确定目标值不存在为止。
下面是使用Python实现二分搜索算法的示例代码:
def binary_search(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
在这个示例中,我们首先定义了一个名为binary_search的函数,它接受两个参数:有序数组arr和目标值target。该函数返回目标值在数组中的索引(如果存在),否则返回-1。
在函数体内部,我们定义了两个变量low和high来表示搜索范围的下界和上界。初始情况下,低界限是数组的第一个元素索引,高界限是数组的最后一个元素索引。
接下来,我们使用一个while循环来不断缩小搜索范围。在每一次迭代中,我们计算中间索引mid,并将中间元素与目标值进行比较。如果中间元素等于目标值,我们就返回中间索引,表示找到了目标值。如果中间元素小于目标值,我们就在右半部分继续搜索,将低界限更新为mid + 1。如果中间元素大于目标值,我们就在左半部分继续搜索,将高界限更新为mid - 1。如果搜索范围缩小到low > high的情况,表示目标值不存在于数组中,我们返回-1。
下面是一个使用示例,演示如何使用二分搜索算法在有序数组中查找目标值:
arr = [1, 3, 5, 7, 9, 11, 13]
target = 9
result = binary_search(arr, target)
if result != -1:
print("目标值的索引为:", result)
else:
print("目标值不存在于数组中")
在这个示例中,我们定义了一个有序数组arr和一个目标值target。我们调用binary_search函数来查找目标值在数组中的索引。如果找到了目标值,我们输出目标值的索引;如果目标值不存在于数组中,我们输出提示信息。
使用二分搜索算法可以在较大的有序数组中高效地查找目标值,时间复杂度为O(log n),其中n是数组的大小。
