那种mori图书馆的排序是否稳定?

时间:2017-03-11 08:37:46

标签: javascript sorting mori

2 个答案:

答案 0 :(得分:1)

简而言之 - 是的

文档中没有描述,但是... Mori使用Clojure脚本中的排序(在mori存储库中没有sortBy的其他实现) https://github.com/swannodette/mori/blob/master/src/mori.cljs#L30

(mori-export sortBy cljs.core/sort-by)

从cljs实现sort-by https://github.com/clojure/clojurescript/blob/master/src/main/cljs/cljs/core.cljs#L2328

使用声称稳定的Google Closure库 https://github.com/google/closure-library/blob/master/closure/goog/array/array.js#L1144

答案 1 :(得分:1)

这是一个检查稳定性的测试脚本:

// Perform tests (increase number for thorough test):
for (var i = 0; i < 4; i++) {
    // Create random array of zeroes and ones, and pair them with a sequence number:
    const arr = Array.from(Array(10), (_, i) => [+(Math.random()>=0.5), i]);
    console.log('in: ', JSON.stringify(arr));
    // Sort by the 0 and 1 values:
    const result = mori.toJs(mori.sortBy(v => v[0], arr));
    console.log('out:', JSON.stringify(result));
    // Throw an error if the sequence number of equal values is not increasing
    result.reduce( (a, b) => {
        if (a[0] === b[0] && a[1] > b[1]) throw "Not stable!";
        return b;
    } );
}
console.log('is stable');
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/mori/0.3.2/mori.min.js"></script>

使用大型数组尝试多次时,事实证明,排序始终保持具有相同排序顺序的值的原始顺序。所以它很稳定。