查找最小的k个元素

来源:互联网 发布:pyro fireshooter淘宝 编辑:程序博客网 时间:2024/06/06 05:09

题目:输入n个整数,输出其中最小的k个。

例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。

分析:我们可以开辟一个长度为k的数组。每次从输入的n个整数中读入一个数。如果数组中已经插入的元素少于k个,则将读入的整数直接放到数组中。否则长度为k的数组已经满了,不能再往数组里插入元素,只能替换了。

#include<iostream>#include<algorithm>#include<vector>using namespace std;int main(){const int MAXN=10;int a[MAXN]={45,3,6,86,23,0,66,44,90,-1};int k;cout<<"输入你要取的前?个最小数:";cin>>k;vector<int>p;for(int i=0;i<MAXN;i++){if(i<k){p.push_back(a[i]);push_heap(p.begin(),p.begin()+i+1);}else{if(a[i]<p[0]){pop_heap(p.begin(),p.end());p.pop_back();p.push_back(a[i]);push_heap(p.begin(),p.end());}}}sort_heap(p.begin(),p.end());cout<<"结果为:";for(int j=0;j<k;j++)cout<<p[j]<<" ";cout<<endl;return 0;}


0 0
原创粉丝点击