int heap[MAX_N],sz = 0;
void push(int x)
{
//做一个插入 把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 < zs && heap[b] < heap[a])
a = b;
if(heap[a] >= x)
break;
heap[i] = heap[a];
i = a;
}
heap[i] = x;
return ret;
}
手写堆
最新推荐文章于 2023-11-09 09:57:46 发布