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