/*小根堆插入、弹出,数组从0开始*/
int heap[MAX_N],sz=0;
//插入
void push(int x)
{
int i=sz++;
while(i>0)
{
int p=(i-1)/2;
if(heap[p]<=x)
break;
heap[i]=heap[p];
i=p;
}
heap[i]=x;
}
//弹出
int pop()
{
int ret=heap[0];
int x=heap[--sz];
int i=0;
while(i*2+1<sz)
{
int a=i*2+1,b=i*2+2;
if(b<sz&&heap[b]<heap[a])
a=b;
if(heap[a]>=x)
break;
heap[i]=heap[a];
i=a;
}
heap[i]=x;
return ret;
}
小根堆的实现
最新推荐文章于 2023-10-18 13:30:19 发布