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

归并排序中子数组的分配与存储问题问询

关于归并排序中子数组存储的解决方案

嗨,兄弟!我完全懂你这种困惑——归并排序的递归逻辑看似清晰,但子数组的存储和作用域问题确实容易卡壳。咱们一步步拆解:

核心思路:避免作用域溢出的两种常用方式

1. 在递归函数内创建临时子数组,合并后返回结果

这种方式最直接,每次递归拆分后,对左右子数组分别排序,然后在当前函数栈内创建临时数组来合并这两个有序子数组,最后返回这个合并好的数组。这样就不用担心子数组超出作用域,因为每个递归层级的结果都会被上层函数接收。

举个伪代码例子:

def merge_sort(arr):
    if len(arr) <= 1:
        return arr
    mid = len(arr) // 2
    left = merge_sort(arr[:mid])  # 拆分左子数组并递归排序
    right = merge_sort(arr[mid:]) # 拆分右子数组并递归排序
    # 合并左右有序子数组
    merged = []
    i = j = 0
    while i < len(left) and j < len(right):
        if left[i] < right[j]:
            merged.append(left[i])
            i += 1
        else:
            merged.append(right[j])
            j += 1
    merged.extend(left[i:])
    merged.extend(right[j:])
    return merged

这里的left和right都是当前递归函数内的局部变量,合并后的merged直接返回给上层调用,完全不会有作用域问题。

2. 使用辅助数组进行原地合并(节省空间)

如果想优化空间复杂度,可以用一个全局或上层作用域的辅助数组,递归时只传递索引范围,而不是创建新数组。这样所有合并操作都基于原数组和辅助数组的索引来完成,避免频繁创建新数组。

伪代码示例:

def merge_sort_in_place(arr):
    aux = arr.copy()  # 辅助数组,在顶层创建,所有递归层级都能访问
    def sort(low, high):
        if low >= high:
            return
        mid = (low + high) // 2
        sort(low, mid)
        sort(mid+1, high)
        merge(low, mid, high)
    
    def merge(low, mid, high):
        # 把原数组的当前段复制到辅助数组
        for k in range(low, high+1):
            aux[k] = arr[k]
        i, j = low, mid+1
        for k in range(low, high+1):
            if i > mid:
                arr[k] = aux[j]
                j += 1
            elif j > high:
                arr[k] = aux[i]
                i += 1
            elif aux[i] < aux[j]:
                arr[k] = aux[i]
                i += 1
            else:
                arr[k] = aux[j]
                j += 1
    sort(0, len(arr)-1)
    return arr

这里的aux数组在顶层函数创建,内部递归的sort和merge函数都能访问它,通过索引操作来合并,既避免了作用域问题,又减少了数组创建的开销。

踩过的坑提醒

  • 千万别在递归的深层函数里创建数组后不返回,上层函数根本拿不到结果,这就是你说的“超出作用域”问题。
  • 如果用辅助数组,一定要注意索引的边界,别越界访问,不然容易出bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:40:32