第三节 堆及其应用;一、预备知识;二、堆的定义;三、堆的性质;四、堆的操作; 重复n次put操作,即可建立一个小根堆。我们举一个例子看看具体过程:设n=10,10堆的数量分别为:3 5 1 7 6 4 2 5 4 1。
设一个堆结构heap[11],现在先考虑用put操作建一个小根堆,具体方法是每次读入一个数插入到堆尾,再通过调整使得满足堆的性质(从堆尾son=len开始,判断它与父结点son/2的大小,若heap[son]heap[son/2],则交换这两个数,且son=son/2,继续判断heap[son]与heap[son/2]的大小,……直到son=1或者heap[son]=heap[son/2]为止)。开始时堆的长度len=0。; 实际上,我们也可以直接用完全二叉树的形式描述出这个过程,得到如下的一棵完全二叉树(堆):;void put(int d) //heap[1]为堆顶
{
int now, next;
heap[++heap_size] = d;
now = heap_size;
while(now 1)
{
next = now 1;
if(heap[now] = heap[next]) break;
swap(heap[now], heap[next]);
now = ne
原创力文档

文档评论(0)