问答题
有关堆排序:(1)给出堆的定义及其数据结构定义;(2)给出堆排序算法的基本思想,并以图例予以说明(要求不少于6个待排序元素);(3)用伪语言描述该算法;(4)给出算法在最坏情况下的时间复杂性分析。【中南大学2005五、1(20分)】
【正确答案】正确答案:(2)堆排序是对树形选择排序的改进,克服了树形选择排序的缺点,其定义在前面已多次谈到,请参见上面本章应用题的44题的(4)和47题的(2)。“筛选”是堆排序的基础算法。由于堆可以看作具有n个结点的完全二叉树,并且认为叶子结点满足堆的定义。所以建堆过程是从待排序序列最后一个非终端结点[n/2]开始,直到根结点,进行“筛选”的过程。堆建成后,即可选得一个关键字最大或最小的记录。然后堆顶元素与序列中最后一个元素交换,再将序列中前n一1个记录重新调整为堆,可选得一个关键字次大或次小的记录。依次类推,则可得到元素的有序序列。 (3)void Sift(RecType R[],int i,int m) {//R[i+1..m]满足堆的定义,本算法调整R[i],使序列R[i..m]中各元素满足堆的性质 R[0]=R[i]; for(j=2*i; j<=m; j*=2) {if(j0;i—-) Sift(R,i,n); for(i=n; i>1; i一一)(R[1]<一一>R[i];Sift(R,1,i一1);)//for }//HeapSort
【答案解析】