📅  最后修改于: 2023-12-03 15:34:25.955000             🧑  作者: Mango
二分法也被称为二分查找,可用于在已排序的数组中查找特定的元素。这种算法通过将要搜索的区间剖成两半来减少搜索范围。
二分法在Python中通常通过一个函数来实现,其语法格式如下所示:
def binary_search(arr, target):
"""
这里写函数的docstring
"""
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
其中,arr
表示要进行搜索的有序数组,target
表示要查找的目标元素。
函数的主体是一个while循环,它不断缩小搜索的范围,直到找到目标元素或搜索范围为空。在每次循环中,先计算出数组中间元素的下标mid
,然后将target与arr[mid]进行比较,以决定将搜索范围缩小至左半部分或右半部分。
下面是一个使用二分法函数搜索有序数组中目标元素的示例:
def test_binary_search():
arr = [1, 3, 4, 6, 8, 9, 11]
assert binary_search(arr, 3) == 1
assert binary_search(arr, 11) == 6
assert binary_search(arr, 7) == -1
在这个例子中,我们创建了一个有序的数组arr,然后分别搜索了其中的元素3、11和7。由于数组arr中包含元素3和11,所以搜索结果应该是它们的下标1和6。而由于数组arr中不包含元素7,所以搜索结果应该为-1。当运行test_binary_search()函数时,只有所有的断言测试都通过时,该函数才会正常退出。
二分法的时间复杂度为O(log2 n),其中n表示要搜索的数组中元素的个数。由于二分法的时间复杂度比顺序搜索(O(n))要小得多,所以它在查找大型有序数组中的元素时非常高效。