动态寻找数组的中位数

在寻找中位数这个过程中,可以使用2个二叉堆去实现,一个最大堆,一个最小堆,然后二者的对二者的top进行运算。具体见代码:

void addnum(int num)
{
	if(big_queue.empty()){
		big_queue.push(num);
	}
	if(big_queue.size()==small_queue.size())        //首先判断2个堆的大小,分三种情况
	{
		if(num>big_queue.top())
			small_queue.push(num);
		else
			big_queue.push(num);
	}
	else if(big_queue.size()>small_queue.size())
	{
		if(num>big_queue.top())
			small_queue.push(num);
		else{
			small_queue.push(big_queue.top());
			big_queue.pop();
			big_queue.push(num);
		}	
	}
	else if(big_queue.size()<small_queue.size())
	{
		if(num<big_queue.top())
			big_queue.push(num);
		else{
			big_queue.push(small_queue.top());
			small_queue.pop();
			small_queue.push(num);
		}
	}
}
double findmedian(){
	if(big_queue.size()==small_queue.size())      //这里就可以直接计算中位数了,也是三种情况
		return(big_queue.top()+small_queue.top())/2;
	else if(big_queue.size()>small_queue.size())
		return big_queue.top();
	else
		return small_queue.top();
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值