如题,TOP-K排序的主要功能是找出一堆不重复数据中的最小或最大的几个数,此处我们介绍这种类型题目的某种解法:
最大最小堆,最大堆结构里面的每一个数不都是小于root的值么?和我们要解决的问题很像。由此,我们可以构造一个堆,并且用它来存储我们需要找的那几个数。有这么一个动态flash就很好地揭示了其中关系: top-k动画演示
关于什么是堆在此就不做介绍了,但注意,此处所用的的最大最小堆和数据结构的推排序的堆有区别,不再赘述。下面给出一个例子来供参考:(C++代码)
#include<stdio.h>
#include<iostream>
using namespace std;
struct min_heap{
min_heap(int n){
this->size=n;
for(int i=0;i<size;i++) heap[i]=-1;
}
int size;
int heap[100];
void add(int n){
if(n<=heap[0]) return;
int tem=0;
heap[0]=n;
while(tem<size){
if(2*tem+1