📜  Python中的二等分算法函数(1)

📅  最后修改于: 2023-12-03 15:34:25.955000             🧑  作者: Mango

Python中的二分法算法函数

二分法也被称为二分查找,可用于在已排序的数组中查找特定的元素。这种算法通过将要搜索的区间剖成两半来减少搜索范围。

语法格式

二分法在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))要小得多,所以它在查找大型有序数组中的元素时非常高效。