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