从一亿个数据中找出前100个最大值
方法一:
> 新建一100个红黑树节点,将输入前100个保存进去,然后全部插入红黑树T
> 遍历剩下的所有输入,对每一个输入值,如果值大于红黑树中最小值,则删除最小值节点,然后修改被删除节点的值为当前输入,然后插入红黑树。
复杂度为n*lg(m), n为输入数据条数,m为输出数据条数
方法二:将红黑树替换成最小堆,每插入一条数据,只需要运行MIN_HEAPIFY即可。
实际运行结果来看,最小堆的方法更快。
方法一代码如下,红黑树代码参考https://blog.csdn.net/v2nero/article/details/19170987
#include "stdafx.h"
#include <iostream>
#include <set>
#include <inttypes.h>
#include "rb.h"
#include <time.h>
//#define outputNum 100
//#define inputNum 100000000
int main(int arc, char *arv[])
{
if (arc != 3) {
printf("head100 input_num output_num\n");
return 1;
}
int inputNum = atoi(arv[1]);
int outputNum = atoi(arv[2]);
rb_tree_t