问题描述:
输入1000个成绩,输出前百分之30的成绩
数据:
无
思路:
在处理大量数据输入并且返回一定量的排序时,一般使用堆排序。
王道的数据结构中的例子:输入10000个数据,返回最大的10个,常使用堆排序。
我这里使用优先队列,c++中优先队列的底层是使用堆来实现的。
priority_queue<int> q; //默认是从大到小排序,即数据越大,优先级越大
//等价于下面这行代码
priority_queue<int, vector<int>, less<int> > q;
//从小到大排练, 数据越小优先级越大
priority_queue<int, vector<int>, greater<int> >q;
代码:
#include <cstdio>
#include <queue>
using namespace std;
const int N = 1000;
const int M = 300;
int main(){
priority_queue<int> q; //默认为大顶堆,数字越大优先级越大
int num;
for(int i = 0; i < N; i++){
scanf("%d", &num);
q.push(num);
}
for(int i = 0; i < M - 1; i++){
printf("%d ", q.top());
q.pop();
}
printf("%d", q.top());
return 0;
}
与直接使用堆进行对比:
待续