我只是在寻找下面列出的代码的可靠解释?我了解中位数的工作原理,但不确定为什么这种格式每次都能正确找到中位数。
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;
}
如果您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
,我们会去else
的的三元运算符是:
(array[middle - 1] + array[middle]) / 2
在我们的例子中,这意味着(array[2-1] + array[2]) / 2
当我们替换数组索引中的值时(2+3)/2 = 2.5
希望这可以清除它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句