什么是稳定排序 (Stable sorting) ?

1,058 阅读1分钟

稳定排序 (Stable sorting) 是排序算法一个很重要的属性,比如 ECMAScript 就要求 Array.prototype.sort 必须为稳定排序。

那么什么是稳定排序呢?简单来说,如果排序算法交换了两个不在算法关心的元素,那么这个算法就被称为不稳定排序 (Unstable sorting)。

举例来说,如果一个排序算法要根据字符串首字母排序,但是两个首字母一样的字符串却被交换了位置,那么此算法便为不稳定排序,反之,则为稳定排序

/* 我们只关心字符串的首字母 */

function unstable(a, b) {
    if (a[0] <= b[0]) return -1; // 往前放
    return 1; // 往后放
}

function stable(a, b) {
    if (a[0] < b[0]) return -1;
    return 1;
}

const arr = ['apple', 'bear', 'lemon', 'litchi'];

arr.sort(unstable);
// [ 'apple', 'bear', 'litchi', 'lemon' ]

arr.sort(stable);
// [ 'apple', 'bear', 'lemon', 'litchi' ]