You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python二分搜索函数改造:实现分步打印搜索子列表及拆分过程

修正二分搜索函数以打印搜索过程

我来帮你调整这个二分搜索函数,让它能按照预期打印出每一步的搜索子列表和拆分过程~你的代码已经实现了二分搜索的核心逻辑,但缺少了打印拆分细节(左子列表、中点元素、右子列表)的步骤,所以没法得到想要的输出。

修改后的代码

def binary_search(a_list, item):
    # 打印当前正在搜索的子列表
    print(a_list)
    if a_list == []:
        return False
    midpoint = len(a_list) // 2
    element = a_list[midpoint]
    # 打印拆分后的左子列表、中点元素、右子列表
    print(f"{a_list[:midpoint]} {element} {a_list[midpoint+1:]}")
    if item == element:
        return True
    elif item < element:
        return binary_search(a_list[:midpoint], item)
    else:
        return binary_search(a_list[midpoint + 1:], item)

# 测试代码
test_list = [0,1,2,8,13,17,19,32,42]
binary_search(test_list,3)
binary_search(test_list,13)

输出结果

运行上述代码后,输出如下:

[0, 1, 2, 8, 13, 17, 19, 32, 42]
[0, 1, 2, 8] 13 [17, 19, 32, 42]
[0, 1, 2, 8]
[0, 1] 2 [8]
[8]
[] 8 []
[]
[0, 1, 2, 8, 13, 17, 19, 32, 42]
[0, 1, 2, 8] 13 [17, 19, 32, 42]

这个结果和你给出的预期输出几乎一致,预期输出里搜索3时多出来的一个[]应该是笔误——递归到空列表时只会打印一次[],不会重复输出。

代码改动说明

  1. 补充拆分过程打印:在计算出中点和中点元素后,我们添加了一行代码,打印当前子列表拆分后的左半部分、中点元素、右半部分,完美匹配预期的格式。
  2. 保留核心逻辑:原代码的二分搜索递归逻辑完全保留,只是补充了打印步骤,不会影响搜索功能的正确性。

内容的提问来源于stack exchange,提问作者Joker

火山引擎 最新活动