欢迎访问宙启技术站
智能推送

Python中如何编写二分搜索函数?

发布时间:2023-06-21 16:23:40

二分搜索,也称为折半搜索,它是一种查找一组有序数据的高效算法。该算法从数据的中间位置开始查找,如果中间位置的数据不是要查找的数据,则根据大小关系在左侧或右侧继续查找,直到找到要查找的数据为止。

在Python中编写二分搜索算法主要分为以下几个步骤:

1. 准备数据

假设有一个有序列表,如下:

data = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

2. 定义函数

定义一个函数,接受两个参数,一个为待查找的数据,一个为数据列表。

def binary_search(value, data):

3. 初始化参数

初始化 left 和 right 参数,分别指向列表的左右两端。

left = 0
right = len(data) - 1

4. 循环查找

使用 while 循环不断进行查找,当 left 大于 right 时,代表查找完成,返回 -1。

while left <= right:
  # do something
return -1

在循环内部,首先计算中间位置 mid,然后判断中间位置的数据与待查找数据的大小关系。

如果中间位置的数据等于待查找数据,则直接返回中间位置的索引。

mid = (left + right) // 2   
if data[mid] == value:
    return mid

如果中间位置的数据小于待查找数据,则在右侧继续查找,重置 left 参数的值为 mid+1。

elif data[mid] < value:
    left = mid + 1

如果中间位置的数据大于待查找数据,则在左侧继续查找,重置 right 参数的值为 mid-1。

else:
    right = mid - 1

5. 完整代码

综合以上步骤,可以得到完整的二分搜索函数代码:

def binary_search(value, data):
    left = 0
    right = len(data) - 1
    while left <= right:
        mid = (left + right) // 2   
        if data[mid] == value:
            return mid
        elif data[mid] < value:
            left = mid + 1
        else:
            right = mid - 1
    return -1

6. 测试结果

使用以下代码测试函数:

data = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
print(binary_search(7, data)) # Output: 3

结果为 3,代表目标数据 7 在列表中的索引位置为 3。

7. 总结

二分搜索是一种高效的算法,可以快速地在有序列表中查找目标数据。Python 中编写二分搜索函数需要遵循的步骤包括:准备数据、定义函数、初始化参数、循环查找、完整代码和测试结果。