从100万个整数里找出100个最大的数

来源:互联网 发布:python软件 编辑:程序博客网 时间:2024/05/21 21:34

100万个整数里找出100个最大的数(用哪种算法效率高)



以下为可能性最大的答案:
部分排序?找出一个支点,把数组分为左右,一直分...


可以参考一下STL中nth_element的实现吧。


选择第k大数有O(n)的算法,过程衍生自快排


呵呵我看懂啦,是个好算法!顶!


取前100个数排序,放入链表中.依次取后面的数与100个数的最小数比较,若取到的数比最小数大,则插入链表中,同时挤掉最小的数.这个过程中使用的链表,因为大小是固定的,所以只需要一开始分配101个节点,用一个指针记录那个空节点,则在整个插入删除过程序中,可以不涉及到内存分配.


引用 12 楼 wyx8421 的回复:
用堆排序只取前100个可以么?时间复杂度好像是O(m(logn))

27楼的做法确实比飞雪前面提的数组要节省空间



27楼的我分析一下。
在n个数中取出m个最大的:
1、排序m个数,mlogm
2、每插入一个数,比较次数取平均值m/2,共(n-m)*m/2
所以总复杂度:mlogm + (n-m)*m/2 = (n - m + 2logm)*m/2
m << n 时,为O(nm);
m = k*n 时,为O(n^2);

而我方法的最坏情况不会超过完全排序一个数组(肯定不会超过,
因为每次递归都丢弃了数组的一半)。
原创粉丝点击