算法基础系列——堆
堆介绍

堆需要完成的操作
- 插入一个数
heap[++size]=x;
up(size);
- 求集合当中的最小值
heap[1];
- 删除最小值
heap[1]=heap[size];
size--;
down(1);
- 删除任意一个元素
heap[k]=heap[size];
size--;
down(k);
up(k);
- 修改任意一个元素
heap[k]=x;
down(k);
up(k);
down()和up()的实现
小根堆
void down(int u)
{
int t=u;
if(u*2<=size && h[u*2]<h[t]) t=u*2;
if(u*2+1<=size && h[u*2+1]<h[t]) t=u*2+1;
if(u!=t){
swap(h[u],h[t]);
down(t);
}
}
void up(int u)
{
while(u/2 && h[u/2]>h[u])
{
swap(u/2,u);
u/=2;
}
}
1293

被折叠的 条评论
为什么被折叠?



