取10000个整数里的最大的10个数
从10000个整数中找出最大的10个,最好的算法是什么?
维持一个长度为10的降序数组,每一个从数组拿到的数字都与这个降序数组的最小值比较。如果小于最小值,就舍弃;如果大于最小值,就把它插入到降序数组中的合适位置,舍弃原来的最小值。这样,遍历一遍就可以找到最大的10个数。因为需要在降序数组中插入一个数,对于遍历的每个数可能都需要这样,所以其复杂为5N。
伪代码如下:
A[N],a[m](分别为原始数组和降序数组,其中N=10000,m=10)
a = A[0 ... 9](将数组A的前10个数赋给数组a)
sort a(将组数a降序排序)
for i in A[ 10 ... N](从10到N遍历数组A)
if A[i] > a[9] then (如果当前值比降序数组中的最小值大)
删除a[9]
将A[i]插入a的合适位置,使a保持降序
end if
end for
输出数组a
还有一个优点,就是当数组很大时,可以将数据分段读入内存处理,而这样做并不影响结果。

浙公网安备 33010602011771号