Javascript で (非常に単純な) 絶対偏差ソート アルゴリズムを実装しようとしています。絶対偏差は、1 つの要素とすべての要素の平均との差の絶対値として定義されます。たとえば、要素 1、4、5、9 の場合、平均は (1 + 4 + 5 + 9) / 4 = 4.75 となるため、各要素の絶対偏差は次のように計算されます。
- absDev(1) = |1 - 4.75| = 3.75
- absDev(4) = |4 - 4.75| = 0.75
- absDev(5) = |5 - 4.75| = 0.25
- absDev(9) = |9 - 4.75| = 4.25
したがって、要素を絶対逸脱度の昇順で並べ替えると、5、4、1、9 のシーケンスが得られます。これまでのところ、私の現在の Javascript 実装では、さまざまなブラウザーでさまざまな結果が得られます。
ここにあります:http://jsfiddle.net/WVvuu/
- Firefox と Safari では、期待される結果 5、4、1、9 が得られます
- Chrome と Opera では、4、5、1、9 になります。
- IE 10 では、1、4、5、9 を取得しています
私のコードにはおそらく非常に単純な間違いがあるに違いないと思いますが、それを見つけることができないようです。何が問題なのか、ブラウザを変更すると異なる結果が得られる理由を理解したいと思います。誰かが私に欠けているものを親切に説明していただければ幸いです。繰り返しますが、これはコードです:
var array = [1, 4, 5, 9];
function absDev(x) {
return Math.abs(x - average(array));
}
function average(array) {
var sum = array.reduce(function(previousValue, currentValue) {
return previousValue + currentValue;
}, 0);
return sum / array.length;
}
array.sort(function(x, y) {
return absDev(x) - absDev(y);
});
alert("Sorted array: " + array);