问答题
试设计一个Heaplnsert(r,key)算法,将关键字key插入到堆R中去,并保证插入后R仍是堆。并分析你的算法的时间复杂性。【哈尔滨工业大学2005五、1(15分)】
【正确答案】正确答案:(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);}
【答案解析】