问答题
已知由n一1个关键字组成的序列(K
1
,K
2
,K
3
…K
n-1
)是大顶堆,现在再增加一个关键字K
n
,要求将关键字序列(K
1
,K
2
,K
3
,…,K
n-1
,K
n
)重新调整为大顶堆。请完成以下要求:
(1)编写满足上述要求的算法。
(2)简述你所编写的算法的基本思想。
(3)分析你所编写的算法的时间复杂度。
【南京航空航天大学2006 7(5分)】【江苏大学2006四、1(12分)】
【正确答案】正确答案:(1)因为前n一1个元素已经是堆,所以从第n个记录开始依次与其双亲(n/2)比较,若大于双亲则交换,继而与其双亲的双亲比较,直至满足堆的定义(最多类推到根)。核心语句段如下: j=n;R[0]=R[j]; for(i=n/2;i>=1ji=i12) if(R[0].key>R[i].key){R[j]=R[i]; j=i;} else break; R[j]=R[0]; (2)void HeapBuilder(RecType R[],int n) {for(i=2;i<=n;i++)sift(R,i);}
【答案解析】