我有以下算法来计算两个相同长度的排序数组的中位数。
如果我们有不同大小的数组,那么实际中位数是否总是在数组的中位数之间,然后在我们继续选择的子数组的中位数之间是否仍然存在?
算法:
ar1[0...|_n/2_|]
)ar2[|_n/2_|...n-1]
)ar1[|_n/2_|...n-1]
)ar2[0...|_n/2_|]
)如果两个数组的大小为2,则使用以下公式得到 中位数。
Median = (max(ar1[0], ar2[0]) + min(ar1[1], ar2[1]))/2
示例:
ar1[] = {1, 12, 15, 26, 38}
ar2[] = {2, 13, 17, 30, 45}
对于上述两个阵列,m1 = 15且m2 = 17
对于上述ar1 []和ar2 [],m1小于m2。所以存在中位数 在以下两个子阵列中的一个。
[15, 26, 38] and [2, 13, 17]
让我们重复上述两个子阵列的过程:
m1 = 26 m2 = 13.
m1大于m2。因此子阵列成为
[15, 26] and [13, 17]
现在尺寸为2,所以:
median = (max(ar1[0], ar2[0]) + min(ar1[1], ar2[1]))/2
= (max(15, 13) + min(26, 17))/2
= (15 + 17)/2
= 16