问题 单项选择题

堆排序是 (54) 类排序,堆排序平均执行的时间复杂度和需要附加的存储空间复杂度分别是 (55)

(55)处填()。

A.O(n2)和O(1)

B.O(nlog2n)和O(1)

C.O(nlog2n)和O(n)

D.O(n2)和O(1)

答案

参考答案:B

解析:

(54)、(55) 堆排序是一种树形选择排序,是对直接选择排序的有效改进。

堆排序来源于一种称为比赛树的排序方法。用比赛树进行排序的方法是:先对n个结点的键值进行两两比较,再对其中n/2个较大的键值之间作两两比较,依此类推,直至选出键值最大的结点。这个过程可用一棵有2n-1个结点的丰满二叉树来表示,二叉树的叶子结点是待排序的结点序列,二叉树的非叶子结点是层层比较产生的结点。除第一个最大者需比较n-1次外,选其他任一结点都只需从叶结点到根结点路径上那些结点的比较,其比较次数与二叉树的高度相对应,比较次数为O(log2n)。总比较次数为O(nlog2n)。

堆排序的过程为:(假设是大顶堆)初始时调整n个结点的存储顺序,使之成为一个堆,这时堆的根结点键值是最大者。然后将根结点与堆的最后一个结点交换,并对少了一个结点后的n-1结点重新作调整,使之再次成为堆。这样,在根结点得到结点序列键值次最大者。再次将堆的根结点与堆的最后一个结点交换,并重新使又少了一个结点的序列调整成为堆。依此类推,直至只有两个结点的堆,并对它们作交换,最后得到有序的n个结点序列。所以堆排序的思想是:选择最大的结点与最后一个结点交换,然后选择次最大结点与倒数第二个结点交换,…,所以堆排序是选择类排序,它只需要1个附加的存储空间。

判断题
单项选择题