📅  最后修改于: 2023-12-03 14:46:45.645000             🧑  作者: Mango
在计算机科学中,二分查找(英语:binary search),也称折半搜索(英语:half-interval search)、对数搜索(英语:logarithmic search)是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某个步骤数组为空,则代表找不到。这种搜索算法每次比较都使搜索范围缩小一半。
我们来看一下用Python编程如何实现二分搜索。
首先,定义一个函数来执行二分搜索。该函数需要接受一个有序列表(sorted list)和要查找的目标值(target value)作为参数。这个函数将返回目标值在列表中的索引位置(index)。
def binary_search(arr, target):
"""二分搜索"""
low = 0 # 定义第一个元素的下标
high = len(arr) - 1 # 定义最后一个元素的下标
while low <= high:
mid = (low + high) // 2 # 找出中间元素的下标
guess = arr[mid] # 获取中间元素的值
if guess == target: # 判断目标值是否与中间元素相等
return mid # 如果相等,则返回中间元素的下标
elif guess > target: # 判断目标值是否小于中间元素的值
high = mid - 1 # 如果小于,则将high减少到中间元素的下标-1
else:
low = mid + 1 # 如果大于,则将low增加到中间元素的下标+1
return None # 如果没有找到目标元素,则返回None
让我们来看一下这个函数是如何工作的。
我们定义了一个有序列表arr和一个目标值target值。然后,我们调用二分搜索函数binary_search,并将列表和目标值作为参数传递给它。
函数开始执行时,首先设置数组中第一个元素的下标和最后一个元素的下标:
low = 0
high = len(arr) - 1
然后,函数一直在while循环中运行,直到找到目标元素或搜索到整个数组而没有找到目标元素。
在每一次迭代中,找出中间元素的下标:
mid = (low + high) // 2
获取中间元素的值:
guess = arr[mid]
然后,比较中间元素的值(guess)与目标值(target):
if guess == target:
return mid
elif guess > target:
high = mid - 1
else:
low = mid + 1
如果猜测的值等于目标值,则我们找到了目标元素,函数将返回中间元素的索引位置。
如果猜测的值大于目标值,则我们将high减少到中间元素的下标-1。
如果猜测的值小于目标值,则我们将low增加到中间元素的下标+1。
如果在while循环中没有找到目标元素,则函数将返回None。
二分搜索是一种非常有用的搜索算法,在许多问题中都可以得到应用。例如:
二分搜索还可以用于解决一些更复杂的问题,如计算凸多边形(convex polygon)的最小包围球(minimum bounding sphere)。
在本文中,我们介绍了Python中的二分搜索算法。我们定义了一个函数来执行二分搜索,并解释了该函数的工作原理。我们还讨论了二分搜索的应用,以及它如何解决一些更复杂的问题。