You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归冒泡排序:5000元素无耗时输出,替换为2000则正常

递归版冒泡排序栈溢出问题解决

报错代码exit code -1073741571 (0xC00000FD)是栈溢出,不是无限循环。你的递归版冒泡排序,递归深度等于数组长度减2(比如5000元素要递归4998次),虽然你设置了sys.setrecursionlimit(6000),但这个只是Python解释器层面的限制,操作系统给Python线程分配的栈空间不够容纳这么多层递归调用的上下文,所以触发了栈溢出。

解决方案:改用迭代版冒泡排序

直接把递归逻辑改成迭代,彻底规避递归深度问题,同时迭代版的运行效率也比递归版更高(没有函数调用的额外开销)。修改后的代码如下:

import sys
import time
import numpy as np

sys.setrecursionlimit(6000)
nums = [10, 50, 100, 500, 1000, 5000]

def bubble(A):
    n = len(A)
    for i in range(n):
        # 每一轮把当前未排序部分的最大元素"冒泡"到末尾
        for j in range(0, n-i-1):
            if A[j] > A[j+1]:
                A[j], A[j+1] = A[j+1], A[j]

def time_by_bubble_sort(nums):
    time_taken_by_bubble_sort = []
    for num in nums:
        A = list(np.random.randint(low=1, high=num, size=num))
        st_time = time.time()
        bubble(A)
        end_time = time.time()
        time_taken = end_time - st_time
        time_taken_by_bubble_sort.append(time_taken)
    return time_taken_by_bubble_sort

print(time_by_bubble_sort(nums))

如果坚持要用递归版,可以尝试把递归限制调得更高(比如sys.setrecursionlimit(10000)),但这依然可能受限于操作系统的栈大小,而且递归本身会带来额外性能损耗,所以迭代版是更稳妥的选择。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 11:21:07