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

为何我的归并排序(Merge Sort)无法实现降序排序?

问题原因及修复方案

你的降序排序失效核心有两个问题:

  1. merge函数的比较逻辑未区分排序方向:当前代码里的left[0][prop] < right[0][prop]是固定的升序比较逻辑,完全没用到ord参数调整排序方向
  2. 返回结果未对应排序方向调整:不管升序还是降序,你返回的都是同一个拼接数组,没有根据排序需求改变顺序

修复后的完整代码

function mergeSort(arr, prop, ord){
    if(arr.length <= 1){
        return arr;
    }

    let mid = Math.floor(arr.length / 2);

    let left = mergeSort(arr.slice(0, mid), prop, ord); 
    let right = mergeSort(arr.slice(mid), prop, ord); 

    return merge(left, right, prop, ord);
}

function merge(left, right, prop, ord){
    let newArr = [];

    while(left.length && right.length){
        // 根据排序方向动态调整比较逻辑
        const shouldTakeLeft = ord === 'asc' 
            ? left[0][prop] < right[0][prop] 
            : left[0][prop] > right[0][prop];
        
        if(shouldTakeLeft){
            newArr.push(left.shift());
        }else{
            newArr.push(right.shift());
        }
    }

    // 排序逻辑已在比较阶段处理,直接拼接剩余元素即可
    return [...newArr, ...left, ...right];
}

验证效果

调用mergeSort(data, 'motor', 'desc')后,数组会按motor字段降序排列,输出结果如下:

[
  { color: 'C', motor: 15, ... },
  { color: 'B', motor: 12, ... },
  { color: 'D', motor: 11, ... },
  { color: 'A', motor: 10, ... }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:10:20