49 38 65 97 76 13 27 49 38 65 13 27 38 13 13 M 76 M 27 27 由于含有n个子结点的完全二叉树的深度为log2n+1,则在树形选择排序中,除了最小数值之外,每选择一个次小数仅需要进行log2n次比较,因此,它的时间复杂度为O(nlogn)。但是,这种排序方法尚有辅助存储空间较多、和“最大值”进行多余比较等缺点。为了弥补,威洛姆斯(J. willioms)在1964年提出了另一种形式的选择排序——堆排序。 堆排序 堆的概念:高有n个元素的序列{k1,k2, …,kn},当且仅当满足下述关系之一,称这为堆。 如果堆中根结点的排序码最小,则称为小根堆;如果堆中根结点的排序码最大,则称为大根堆。 堆排序的思想是:首先设法把原始序列构造成一个堆,使得n个元素的最大值处于序列的第一个位置;然后交换序列第一元素(最大值元素)与最后一个元素。再把序列的前n-1个元素组成的子序列构成一个新堆,重复以上步骤,最终整个序列成为有序序列。 堆排序的关键是:(1)如何将一个无序序列建成一个堆; (2)如何把“去掉”了最大值元素后的序列 调整剩余元素为一个新的堆。 构造初始堆是指把整个记录从R1到Rn调整为一个大根堆。完全二叉树中,所有序号 in/2的结点都是叶结点,以这些结点为根的子树均已是堆,只
原创力文档

文档评论(0)