题目要求
编写一个实验程序,利用priority_queue(优先队列)求出一个无序整数序列中第k小的元素。
解题思路
使用 priority_queue(优先队列)最小值出队的原理,把数组存入优先队列中,再依次出列,第k个出列的元素就是第k小的元素。
代码
#include <iostream>
#include <queue>
#define N 5
using namespace std;
void chuShiHua(int &k,int a[]) {
cout<<"请输入队列元素:";
for(int i=0;i<N;i++){//输入整数
cin>>a[i];
}
cout<<"请输入k:";
cin>>k;
}
int findK(int a[],int k){
//less<int>表示数字大的优先级越大,greater<int>表示数字小的优先级越大
priority_queue<int,vector<int>,greater<int> > q;//为升序排序的优先队列
for(int i=0;i<N;i++){//把数组存进优先队列中
q.push(a[i]);
}
for(;k>1;k--){//最小值出列
q.pop();
}
return q.top();//输出第k小的值
}
int main(){
int k,a[N];
chuShiHua(k,a);
cout<<"第k小的数:"<<findK(a,k)<<endl;
return 0;
}