堆的插入
堆的删除在这里: 堆的删除.
法一:交换法
if (len >= maxn)
{
printf("堆已满\n");
return;
}
else
{
heap[++len] = value;
int son = len;
int fa = son / 2;
while (son > 1)//还没有到堆顶,并且还没有找到合适的位置,就继续上浮
{
if (heap[son] <= heap[fa])//现在是构建最大堆,所有子节点的值都比父节点小
{
break;
}
else
{
swap(heap[son], heap[fa]);//如果子节点比父节点大,就交换他们的值
son = fa;
fa = son / 2;
}
}
}
但是这种方法速度较慢,每次都要做交换,而每次swap相当于三个动作。
t=x;x=y;y=t;在数据量较大的时候会很慢。接下来介绍另外两种方法。