动态寻找数组的中位数

在寻找中位数这个过程中,可以使用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())
		return big_queue.top();
	else
		return small_queue.top();
}

 

你可能感兴趣的:(数据结构)