如果数的取值范围不大 可以考虑 桶排序 http://blog.csdn.net/quietwave/article/details/8008572
先判断个数的奇偶,然后排序,取值
就是要不排序啊。排序的话,就算不考虑性能o(n * lg(n)), 这么多数往哪存啊
所有的查找算法都是基于有序数组实现的.
这是我对算法的一个认知.....可能有些绝对,但我没想出别的来
首先要搞明白什么是中位数:
1 3 6
其中3就是中位数。也就是说与平均值相差最小的那个,解释下。该数组的平均值是3.3
2.3 0.3 2.7
上面是每个数与平均值的差的绝对值。
[算法出来了]
通过两次遍历寻找差值最小的那个数,即是中位数。
1 第一遍遍历:求得平均值
2 第二遍遍历:计算每个位置对应的差值,并记录差值最小的那个对应的数,最终这个记录值便是中位数。
中位数是大小在中间的那个数,比如有201个数,找到中间的数,有100个比它大,有100个比它小
比如 1, 1, 1, 2, 3, 3, 1000, 中位数应该是2
按你的算法是3
@五星: 对,没有考虑到这种情况。上面是不允许重复的情况....再想想
暂时没有对应的O(n)算法,请参考编程之美里面的取第k位数
如果限制内存的话,可以手写个二叉堆,填充一半的元素,利用堆排序的原理取得中位数。