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

MergeSort算法输出异常求助:传入(6,3,5)返回[3,3,5]

问题分析与修复

核心错误点

  • 未声明的全局变量:leftArraySorted和rightArraySorted没有用let或const声明,变成了全局变量。递归调用mergeSort时,后续的递归会覆盖这两个变量的值,导致合并阶段使用的不是当前递归层级对应的左右有序数组,而是最后一次递归的结果——这是输出错误的主要原因。
  • 合并逻辑的冗余与顺序问题:原代码用for循环强制遍历原数组长度,判断顺序不合理。当其中一个数组遍历完毕(对应索引的元素为undefined),前面的</>/===条件都不会触发,虽然后续能走到undefined判断,但结合全局变量的问题会进一步放大错误;另外,当左右元素相等时,只推入了左边元素,存在逻辑漏洞。
  • 调用方式错误(推测笔误):你写的mergeSort(6, 3, 5)没有传入数组,正确的调用应该是mergeSort([6, 3, 5]),否则函数会因为array是数字类型而报错。

修复后的代码

function mergeSort(array) {
    if (array.length === 1) return array

    // 用const声明局部变量,避免全局污染
    const leftArraySorted = mergeSort(array.slice(0, Math.floor(array.length / 2)))
    const rightArraySorted = mergeSort(array.slice(Math.floor(array.length / 2)))

    let a = 0
    let b = 0
    const mergedSortedArray = []

    // 先合并两个数组都有元素的部分
    while (a < leftArraySorted.length && b < rightArraySorted.length) {
        if (leftArraySorted[a] < rightArraySorted[b]) {
            mergedSortedArray.push(leftArraySorted[a])
            a += 1
        } else if (leftArraySorted[a] > rightArraySorted[b]) {
            mergedSortedArray.push(rightArraySorted[b])
            b += 1
        } else {
            // 相等时同时推入左右元素,避免遗漏
            mergedSortedArray.push(leftArraySorted[a])
            mergedSortedArray.push(rightArraySorted[b])
            a += 1
            b += 1
        }
    }

    // 处理左数组剩余元素
    while (a < leftArraySorted.length) {
        mergedSortedArray.push(leftArraySorted[a])
        a += 1
    }

    // 处理右数组剩余元素
    while (b < rightArraySorted.length) {
        mergedSortedArray.push(rightArraySorted[b])
        b += 1
    }

    return mergedSortedArray
}

// 正确调用示例
console.log(mergeSort([6, 3, 5])) // 输出 [3, 5, 6]

修复说明

  1. 给leftArraySorted和rightArraySorted添加const声明,确保每个递归层级的变量都是局部的,不会被其他递归调用覆盖。
  2. 把原有的for循环改成更合理的while循环:先合并两个数组都有元素的部分,再单独处理剩余元素,逻辑更清晰,避免了强制遍历原数组长度带来的错误。
  3. 修复了相等元素的处理逻辑,确保左右相等的元素都被正确推入结果数组。
  4. 修正了调用方式,传入数组参数而非独立数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:35:27