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

admin2009-02-15  31

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

选项 A、O(n2)和O(1)
B、O(nlog2n)和O(1)
C、O(nlog2n)和O(n)
D、O(n2)和O(1)

答案B

解析 堆排序是一种树形选择排序,是对直接选择排序的有效改进。
   堆排序来源于一种称为比赛树的排序方法。用比赛树进行排序的方法是:先对n个结点的键值进行两两比较,再对其中n/2个较大的键值之间作两两比较,依此类推,直至选出键值最大的结点。这个过程可用一棵有2n-1个结点的丰满二叉树来表示,二叉树的叶子结点是待排序的结点序列,二叉树的非叶子结点是层层比较产生的结点。除第一个最大者需比较n-1次外,选其他任一结点都只需从叶结点到根结点路径上那些结点的比较,其比较次数与二叉树的高度相对应,比较次数为O(log2n)。总比较次数为O(nlog2n)。
   堆排序的过程为:(假设是大顶堆)初始时调整n个结点的存储顺序,使之成为一个堆,这时堆的根结点键值是最大者。然后将根结点与堆的最后一个结点交换,并对少了一个结点后的n-1结点重新作调整,使之再次成为堆。这样,在根结点得到结点序列键值次最大者。再次将堆的根结点与堆的最后一个结点交换,并重新使又少了一个结点的序列调整成为堆。依此类推,直至只有两个结点的堆,并对它们作交换,最后得到有序的n个结点序列。所以堆排序的思想是:选择最大的结点与最后一个结点交换,然后选择次最大结点与倒数第二个结点交换,…,所以堆排序是选择类排序,它只需要1个附加的存储空间。
转载请注明原文地址:https://jikaoti.com/ti/cxa7FFFM
0

相关试题推荐
最新回复(0)