Python中如何使用二分法快速查找数据
平时我们会经常找东西,东西少,随便找下就可以找到了,当东西很多很多的时候,找起来就要花大量的时间。假如你平时摆放的东西很整齐、很有规律,那就方便多了,如果你对所有的东西都编号标记,那可能一下就找出来了。
下午我们通过二分发去,2个间的东西先查找一个房间,找不到再到另外一个房间去找,如果找到了是不是不用所有的找一遍了。我们还可以进一步 把一个房间分成2个小堆,甚至更小的单元,大大减少了查找次数(log n),提高的我们的效率,有的朋友会说,我就一点东西一眼就看到了,我们是基于数据很庞大的情况下,比如图书管理,通过编号,利用算法查询到在什么位置,那么直接去拿就好了
还是直接给代码吧。
def binary_search(arr, target):#定义一个查找函数
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 = [1, 3, 5, 7, 9, 11] # 示例:在有序数组中查找数字
target = 7 #定义一个目标,这里为了方便,实际很多情况下是要输入的
index = binary_search(arr, target)
if index != -1:
print(f"你找的目标是 {target} ,索引是 {index}")
else:
print("未找到目标")
二分查找结果
多练习,多出问题,多积累。