[原创]从1亿个数据中找出前100个最大值

从一亿个数据中找出前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
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值