我正在尝试在 Javascript 中实现(确实非常简单)绝对偏差排序算法。绝对偏差定义为一个元素与所有元素平均值之差的绝对值。例如,给定元素 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);