【本文链接】
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
【参考】