一个前端,爱跑步、爱吉他、爱做饭、爱生活、爱编程、爱南芳姑娘,爱我所爱。世间最温暖又无价的是阳光、空气与爱,愿它们能带你去更远的地方。

  • 文章
  • 心情
  • 照片墙
  • 留言板
  • 工具
  • 友链
  • biaoblog

    专注web开发技术分享

    深入js的sort稳定排序

    技术 14 2025-05-20 10:40

    问:在js中的sort 如果俩个值相同 他们的排序是什么样的?


    在 JavaScript 中使用 .sort() 方法时,如果两个值“相同”,也就是 比较函数返回 0,那么它们在排序后的位置是:


    排序算法决定的,不保证原顺序,也就是说,它们可能调换位置,也可能不动


    ✅ 简洁回答:

    • .sort()不稳定排序算法(在老浏览器或旧规范中),即:
    “相等元素的相对顺序不一定保持不变”。
    • 但在 **现代浏览器(如 Chrome V8 引擎、Safari、Firefox)**中,通常实现了稳定排序
    “如果两个元素相等,它们的原始顺序会被保留”。


    👀 举个例子:

    const arr = [
     { name: 'apple', value: 2 },
     { name: 'banana', value: 1 },
     { name: 'cherry', value: 2 }
    ];
    
    arr.sort((a, b) => a.value - b.value);
    console.log(arr);
    

    可能结果(现代浏览器中):

    [
     { name: 'banana', value: 1 },
     { name: 'apple', value: 2 },  // 原顺序保留 ✅
     { name: 'cherry', value: 2 }
    ]
    

    但如果排序算法是不稳定的,有可能会变成:

    [
     { name: 'banana', value: 1 },
     { name: 'cherry', value: 2 },
     { name: 'apple', value: 2 }
    ]
    

    🧠 如何理解“稳定排序”?

    稳定排序的定义:


    如果 ab 相等,并且 ab 前面,那么排序之后 a 仍然在 b 前面。

    不稳定排序就可能交换相等元素的位置。


    举例说明2:

    a=1 b=2 c=1

    不稳定排序:

    可能是a= 1 c= 1 b=2

    也可能是c= 1 a=1 b=2


    稳定排序:

    a= 1 c= 1 b=2

    文章评论

    评论列表(0