【100题】第五题

查找最小的k个元素(数组)
题目:输入n个整数,输出其中最小的k个。
例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。

一,最原始的一种方法

插入排序,后输出最小的k个

源码:

缺点:时间复杂度高。O(n^2);

二,简单优化后

排序方法使用快速排序


分析:虽然时间提高了,但是还是可以再优化。O(nlogn)

三,再次优化

维护一个K大小的数组,只用遍历一次n个元素,然后就能得到最小的k个元素。

伪代码:

1, 将n个元素前k个放入数组中,每插入一个元素,对k数组中元素进行插入排序;

2,从第k+1开始,每遍历一个元素,跟数组中最大的(maxK)比较 maxK>a则将maxK删除,将a插入k中。直到程序结尾。

源码:

五,还能优化,将维护一个k大小数组换成维护一个k大小堆

六,最后四种方法综合代码如下




你可能感兴趣的:(【100题】第五题)