输入n个整数,输出其中最小的K个,算法复杂度为O(nlogk)
#include<iostream>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;
typedef multiset<int,greater<int> > intSet;
typedef multiset<int,greater<int> >::iterator setIterator;
void GetLeastKNumbers(const vector<int>& data,intSet& leastNumbers,int k)
{
leastNumbers.clear();
if(data.size()<k||k<1)
return;
vector<int>::const_iterator it=data.begin();
for(;it!=data.end();it++)
{
if(leastNumbers.size()<k)
leastNumbers.insert(*it);
else
{
setIterator greatest=leastNumbers.begin();
if(*it<*greatest)
{
leastNumbers.erase(greatest);
leastNumbers.insert(*it);
}
}
}
}
int main()
{
int n,k;
int number;
vector<int> data;
intSet leastNumbers;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>number;
data.push_back(number);
}
cin>>k;
GetLeastKNumbers(data,leastNumbers,k);
for(setIterator it=leastNumbers.begin();it!=leastNumbers.end();++it)
cout<<*it<<" ";
cout<<endl;
}