📅  最后修改于: 2023-12-03 15:06:09.341000             🧑  作者: Mango
二进制搜索(Binary Search),也称折半搜索,是一种在有序数组中查找某一特定元素的搜索算法。它的查找是将原本要查找的数据集合一分为二,每次取其一半的子集,在子集中寻找目标值,依此类推直到找到目标值或者确定目标值不存在。
二分查找法的算法时间复杂度为$O(log_2n)$,空间复杂度为$O(1)$。
下面是一个基于递归方式实现二分查找的示例代码:
def binary_search(arr, left, right, target):
if left > right:
return -1
# 中间值
mid = (left + right) // 2
if arr[mid] == target:
return mid
elif arr[mid] > target:
return binary_search(arr, left, mid - 1, target)
else:
return binary_search(arr, mid + 1, right, target)
上述代码中,arr
为有序数组,target
为要查找的目标值,left
和right
为左右边界。其中,递归是算法实现的核心点,每次查找时,都将目标区间一分为二,接着判断中间点的值与目标值的大小关系。
下面是二分搜索的使用示例:
arr = [1, 2, 3, 5, 6, 7, 8, 9, 10]
target = 5
result = binary_search(arr, 0, len(arr) - 1, target)
if result != -1:
print("元素在数组中的索引为%d" % result)
else:
print("元素不在数组中")
二分查找是一种有序数组查找的高效算法,其时间复杂度仅为$O(log_2n)$,而空间复杂度仅为$O(1)$。上述示例代码可以作为二分查找算法实现的基础代码,也可以根据具体情况做出相应的修改。