首页 > 代码库 > 78 无序数组的中位数

78 无序数组的中位数

【本文链接】

http://www.cnblogs.com/hellogiser/p/median-of-unsorted-array.html

【题目】

中位数即是排过序后的处于数组最中间的元素。 不考虑数组长度为偶数的情况。设集合元素个数为n。

【分析】

大体思路:
思路1) 排序法 n*lgn

    把无序数组排好序,取出中间的元素
            时间复杂度 采用普通的比较排序法 O(N*logN)
            如果采用非比较的计数排序等方法, 时间复杂度 O(N), 空间复杂度也是O(N).

思路2)  数组或堆存储K个元素  k+(n-k)*k    或者  k+(n-k)*lgk 
          2.1)将前(n+1)/2个元素调整为一个小顶堆,
          2.2)对后续的每一个元素,和堆顶比较,如果小于等于堆顶,丢弃之,取下一个元素。 如果大于堆顶,用该元素取代堆顶,调整堆,取下一元素。重复2.2步           
          2.3)  当遍历完所有元素之后,堆顶即是中位数。

思路3) 线性时间选择  n

  参见http://www.cnblogs.com/hellogiser/p/kmin-of-array.html 

【参考】

http://blog.csdn.net/zdl1016/article/details/4676882

78 无序数组的中位数