1. ホーム
  2. javascript

[解決済み] JavaScript クイックソート

2022-03-05 23:33:30

質問

私はしばらくウェブを見て回りましたが、一般的に使用されているクイックソートの「安定した」デファクト実装はあるのでしょうか? 自分で書くこともできますが、車輪を再発明する必要はないでしょう。

どのように解決するのですか?

装飾-ソート-装飾解除のパターンを使って、不安定なソートを簡単に安定させることができます。

function stableSort(v, f)
{
    if (f === undefined) {
        f = function(a, b) {
            a = ""+a; b = ""+b;
            return a < b ? -1 : (a > b ? 1 : 0);
        }
    }
    var dv = [];
    for (var i=0; i<v.length; i++) {
        dv[i] = [v[i], i];
    }
    dv.sort(function(a, b){
              return f(a[0], b[0]) || (a[1] - b[1]);
            });
    for (var i=0; i<v.length; i++) {
        v[i] = dv[i][0];
    }
}

このアイデアは、インデックスを最後のソート項として追加することで、2つの要素が "同じ" にならないようにし、他のすべてが同じであれば、元のインデックスが識別要因となるようにすることです。