【算法】 二分法
二分法
文字解释
二分法查找用于有序的数列,取数列正中间的值与目标值比较,若小于目标值,说明目标值在右边的区域,
再到右边的区域中取中间的值进行比较,若中间的值大于目标值,说明目标值在左边的区域,再对左边的区域获取中间的值,
如此进行查找,每次查找应该切割数列,或者标记左右边界位置,否则无法做到划分区域
代码
def func(num_list, left_index, right_index, target_num):
# 当左边界大于右边界时 说明没有找到
if left_index > right_index:
print('没找到')
# 获取中间坐标及值
middle_index = (left_index + right_index) // 2
middle_value = num_list[middle_index]
if middle_value < target_num:
# 若小于目标值 则将左边界扩到当前中间位置的右边一位
func(num_list, middle_index + 1, right_index, target_num)
elif middle_value > target_num:
# 若大于目标值 则将右边界扩到当前中间位置的左边一位
func(num_list, left_index, middle_index - 1, target_num)
else:
# 不大不小 那就是找到了
print(f'找到了 在索引为{middle_index}的位置')
l1 = [1, 2, 3, 4, 5, 7, 8, 9, 12, 13, 24, 26, 43, 152]
left = 0
right = len(l1)
target_num = 1
func(l1, left, right, target_num)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!