#include <stdio.h>
#include <queue>
using namespace std;
priority_queue< int, vector<int>, less<int> > heap; //堆 less<int>()//内置类型的由小到大排序 greater<int>()//内置类型的由大到小排序
int main(){
int n,k,x;
printf("请输入无序队列的元素个数和第k小的位置:\n");
scanf("%d %d",&n,&k);
printf("请输入%d个元素的值:\n",n);
for(int i=0; i<n; i++){
scanf("%d",&x);
if(heap.size()<k){//如果输入的值个数小于k的值就入队
heap.push(x);
}else{ //当输入元素超过第k个位置时,就把队首元素给a
int a = heap.top();
if(a>x){//如果a的值大于新进的值a就出队,新的元素进队,再次比较
heap.pop();
heap.push(x);
}
}
}
printf("第%d个小的数是:%d\n", k, heap.top());
system("pause");
return 0;
}
算法分析与设计----找第k小的元素
最新推荐文章于 2021-06-21 01:47:27 发布
该博客介绍了如何利用C++实现一个优先队列来找出无序队列中第k小的数。通过建立一个小顶堆,当输入元素数量达到k时,堆顶元素即为第k小的数。程序读取用户输入的n个整数,并在过程中不断更新堆,最终输出结果。
摘要由CSDN通过智能技术生成