【算法】 二分法

二分法

文字解释

二分法查找用于有序的数列,取数列正中间的值与目标值比较,若小于目标值,说明目标值在右边的区域,
再到右边的区域中取中间的值进行比较,若中间的值大于目标值,说明目标值在左边的区域,再对左边的区域获取中间的值,
如此进行查找,每次查找应该切割数列,或者标记左右边界位置,否则无法做到划分区域

代码

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)

posted on   祁珏  阅读(289)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示