使用Python实现二分搜索函数
发布时间:2023-07-02 10:49:09
二分搜索算法也被称为折半查找,是一种高效的搜索算法。它的核心思想是将已排序的数组一分为二,然后与目标值进行比较,根据比较结果确定继续搜索的方向。如果目标值等于中间值,则搜索结束;如果目标值小于中间值,则继续在左半部分数组中搜索;如果目标值大于中间值,则在右半部分数组中搜索。如此循环进行,直到找到目标值或者确定目标值不在数组中。
下面是使用Python实现二分搜索函数的代码:
def binary_search(nums, target):
left, right = 0, len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] == target:
return mid
elif nums[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
在这段代码中,binary_search函数接受两个参数:nums是已排序的数组,target是需要查找的目标值。它使用了两个指针left和right,初始时分别指向数组的 个元素和最后一个元素。然后使用一个循环,不断将数组一分为二,并进行比较,直到找到目标值或者确定目标值不在数组中。
循环中的关键步骤是计算中间值mid,可以使用整数除法//来确保得到整数索引。然后比较中间值与目标值的大小关系,如果相等则返回中间值的索引,如果中间值小于目标值则更新left指针为mid + 1,否则更新right指针为mid - 1。这样不断缩小搜索范围,直到找到目标值或者搜索范围为空。
如果循环结束后仍然没有找到目标值,则返回-1表示目标值不存在于数组中。
可以使用以下代码来测试二分搜索函数:
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
target = 5
index = binary_search(nums, target)
if index != -1:
print(f"目标值 {target} 在数组中的索引为 {index}")
else:
print(f"目标值 {target} 不存在于数组中")
在这个例子中,目标值5存在于数组中,二分搜索函数会返回5的索引2。输出结果为:
目标值 5 在数组中的索引为 2
二分搜索算法的时间复杂度为O(log n),其中n是数组的元素个数。这是一种非常高效的算法,特别适用于大型数组的查找操作。
