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 中编写二分搜索函数需要遵循的步骤包括:准备数据、定义函数、初始化参数、循环查找、完整代码和测试结果。
