求无需序列中第k小的元素
一、【问题描述】
编写一个实验程序,利用priority_queue(优先队列)求粗一个无序整数序列中第k小的元素
二、【问题解答】
分析:
创建一个priority_queue<int,vector<int>,greater<int>>
的小根堆pq,将数组a中的所有元素进队,再连续出队,第k个出队元素即为所求。
对应代码如下:
#include<stdio.h>
#include<queue>
using namespace std;
int thk(int a[],int n,int k){
int i,j;
priority_queue<int,vector<int>,greater<int> > pq;
for(i=0;i<n;i++){
pq.push(a[i]);
}
for(i=1;i<=k;i++){
j=pq.top();
pq.pop();
}
return j;
}
int main(){
int a[]={9,5,0,13,4,6,7,2};
int n=sizeof(a)/sizeof(a[0]);
for(int k=1;k<=n;k++){
printf("第%d小的元素:%d\n",k,thk(a,n,k));
}
return 0;
}