描述

一亿个数找最大的1000个数,要求效率高占用内存少。函数原型为:find_max_data(int* source_data, int* max_data),其中source_data是存放一亿个数的数组,max_data用于存放其中最大的1000个数。

思路

使用multiset的自动排序功能(默认从小到大排列),每次插入比最小数更大的值。

代码

// 从1亿个数中找到最大的1000个数
void find_max_data(int *source_data, int length, int k)
{
int count = 0;

multiset<int> set;
multiset<int>::iterator it;
for(int i = 0; i < length; i++)
{
if(count < k)
{
set.insert(source_data[i]);
}
else
{
it = set.begin();
if(*it < source_data[i])
{
set.erase(it);
set.insert(source_data[i]);
}
}
count++;
}
it = set.begin();
// 打印
for (; it != set.end(); it++)
{
cout<<*it<<endl;
}
}