摘要: 这是一道很普遍和基础的题目,有很深的扩展性。一、首先,第一反应往往会想到快速排序后,再输出K个元素,但是时间复杂度为O(N*logN/log2) + O(K) = O(N*logN/log2)。 另外一种做法是,通过冒泡排序选出K个最大的出来,它的时间复杂度为O(N*K)。 这就要比较K < logN/log2 ? K : logN/log2 来取舍算法了,但是这些都不是比较好的办法。二、那么,进一步化简: 快排的过程是找到随机数,将它固定到最终位置,将数据按大小分组,重复递归下去,直到最后排好序,是一种分治的思想。 所以,我们可以找到第k个数的位置(由大到小排序),从而减少了查找交换次 阅读全文
posted @ 2012-11-21 19:35 MichaelGD 阅读(413) 评论(0) 推荐(0) 编辑