我只是在寻找下面列出的代码的可靠解释?我了解中位数的工作原理,但不确定为什么这种格式每次都能正确找到中位数。
function median(array) {
array.sort(function(a, b) {
return a - b;
});
var middle = array.length / 2;
return middle % 1 ? array[middle - 0.5] : (array[middle - 1] +
array[middle]) / 2;
}
答案 0 :(得分:0)
如果您将console.log(array)
后面的array.sort
放在更好的位置可以看到,这实际上会有所帮助:
function median(array) {
array.sort(function(a, b) {
return a - b;
});
console.log(array) // <-- so you can see the sorted array
var middle = array.length / 2;
return middle % 1 ? array[middle - 0.5] : (array[middle - 1] + array[middle]) / 2;
}
console.log(median([5,4,3,2,1]))
根据定义median
是:
中位数是将上半部分与下半部分分开的值 数据样本。对于数据集,可以将其视为“中间” 值。例如,在数据集{1、3、3、6、7、8、9}中,中位数 是6,是第四大数字,也是第四小数字 样本
因此,首先必须对数组进行排序,这样我们才能确定哪个是最小的,哪个是最大的数字。然后我们找出数组的中间。之后,我们只需使用% modulus operator
=> (5/2)%1
将是0.5
来检查长度是偶数还是奇数,其中(4/2)%1
将是0
,然后基于此,我们从数组中按索引选择适当的项(注意数组索引从0
开始)。
让我们以[5,4,3,2,1]
数组为例:
排序为[1,2,3,4,5]
,数组divided by 2
长度的其余部分为2.5
,而模数1
的含义为0.5
。因此,在这种情况下,我们将从数组中选择array[middle-0.5]
值,这意味着array[2.5-0.5]
将是2
。我们在索引2
处的数组的值为3
,因此该数组的中位数为3
。
在[1,2,3,4]
的情况下,中位数为2.5
,因为模量将返回0
,我们将转到ternary operator的else
,是:
(array[middle - 1] + array[middle]) / 2
在我们的情况下,这意味着(array[2-1] + array[2]) / 2
,当我们替换数组索引中的值时将是(2+3)/2 = 2.5
希望可以清除它。