Ida*_*dan 2 sorting algorithm radix-sort median median-of-medians
给定N个8位数字的数组(值0-255)?
如何找到中位数?
我尝试了基数排序和中位数算法的中位数.
如果数字的值在0到255之间,有没有更好的方法?
使用类似于计数排序的东西.
counts[x]
将是x
输入数组中出现的次数.counts[input[i]]++
).这O(n)
使用O(1)
空间(渐近最优)及时运行.
所以像:(伪代码)
// Count the number of occurrences of each value.
counts[256] = {0}
for i = 0 to input.length
counts[input[i]]++
// Get the median.
count = input.length
sum = 0
if count divisible by 2
first = NaN
for i = 0 to counts.length
sum += counts[i]
if first == NaN && sum >= count / 2
first = i
if sum >= count / 2 + 1
median = (first + i) / 2
break
else
for i = 0 to counts.length
sum += counts[i]
if sum >= (count + 1) / 2
median = i
break
return median
Run Code Online (Sandbox Code Playgroud)
还有其他方法可以实现相同的时间和空间复杂度(虽然比上面复杂一点,并要求您修改输入数组):