欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

如何从前个数据中找到前K个大/小的数据并打印?

程序员文章站 2024-03-15 19:08:00
...
要解决这个问题,那么我们可以从前十个数据入手,先拿到前十个数据,接下来我们以求前2000个数据中前十个小的数据为例:
取出前十个数据,我们把它放入小跟堆里;从十一个数据vec[i]开始,我们与第一小minHeap.top()数据作比较。如果vec[i] < minHeap.top(),则将vec[i] 的值赋给minHeap.top();遍历完所有数据之后,则我们的小根堆里就是我们要的数据。
上代码:(2000个数据中找到前10 小的)

#include<iostream>
#include<vector>
#include<functional>
#include<queue>
using namespace std;
typedef unsigned int uint
const int N = 2000;
int K = 10;

int main()
{
vector<uint> vec ;
for(int i = 0;i< 2000;i++)
	{
	vec.push_back(rand()+i);
	}
priority_queue <uint,vector<uint>,greater<uint>> minHeap; //申请一个小根堆
for(int i = 0; i< K;++i)															//将前十个数放到小根堆里面。
{
	minHeap.push(vec[i]);
}
for(int i = K;i< N ;++i)
{
	if(vec[i] < minHeap.top())
	{
	minHeap.pop();
	minHeap.push(vec[i]);
	}
}
for(int i = 0;i< K;++i)
{
	cout<<minHeap.top()<<" ";
	minHeap.pop();
}
	cout<<endl;
return 0;
}