知识大全 排序 - 选择排序 - 堆排序(三)
Posted 结点
篇首语:知识的价值不在于占有,而在于使用。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 排序 - 选择排序 - 堆排序(三)相关的知识,希望对你有一定的参考价值。
( ) BuildHeap和Heapify函数的实现
因为构造初始堆必须使用到调整堆的操作 先讨论Heapify的实现
① Heapify函数思想方法
每趟排序开始前R[l i]是以R[ ]为根的堆 在R[ ]与R[i]交换后 新的无序区R[ i ]中只有R[ ]的值发生了变化 故除
R[ ]可能违反堆性质外 其余任何结点为根的子树均是堆 因此 当被调整区间是R[low high]时 只须调整以R[low]为根的树即
可
筛选法 调整堆
R[low]的左 右子树(若存在)均已是堆 这两棵子树的根R[ low]和R[ low+ ]分别是各自子树中关键字最大的结点 若
R[low] key不小于这两个孩子结点的关键字 则R[low]未违反堆性质 以R[low]为根的树已是堆 无须调整;否则必须将R[low]和
它的两个孩子结点中关键字较大者进行交换 即R[low]与R[large](R[large] key=max(R[ low] key R[ low+ ] key))交换 交
换后又可能使结点R[large]违反堆性质 同样由于该结点的两棵子树(若存在)仍然是堆 故可重复上述的调整过程 对以
R[large]为根的树进行调整 此过程直至当前被调整的结点已满足堆性质 或者该结点已是叶子为止 上述过程就象过筛子一样
把较小的关键字逐层筛下去 而将较大的关键字逐层选上来 因此 有人将此方法称为 筛选法
具体的算法【参见教材】
②BuildHeap的实现
要将初始文件R[l n]调整为一个大根堆 就必须将它所对应的完全二叉树中以每一结点为根的子树都调整为堆
显然只有一个结点的树是堆 而在完全二叉树中 所有序号
>的结点都是叶子 因此以这些结点为根的子树均已是堆这样 我们只需依次将以序号为
>的结点作为根的子树都调整为堆即可具体算法【参见教材】
大根堆排序实例
对于关键字序列( ) 在建堆过程中完全二叉树及其存储结构的变化情况参见
算法分析
堆排序的时间 主要由建立初始堆和反复重建堆这两部分的时间开销构成 它们均是通过调用Heapify实现的
堆排序的最坏时间复杂度为O(nlgn) 堆排序的平均性能较接近于最坏性能
由于建初始堆所需的比较次数较多 所以堆排序不适宜于记录数较少的文件
堆排序是就地排序 辅助空间为O( )
它是不稳定的排序方法
cha138/Article/program/sjjg/201311/23779相关参考
堆排序 堆排序定义 n个关键字序列KlK…Kn称为堆当且仅当该序列满足如下性质(简称为堆性质) ()ki≤Ki且ki≤Ki+或()Ki≥Ki且ki≥Ki+(≤i≤>) 若将此序列所存储的向
从节省存储空间考虑先选堆排序再选快速排序最后选择归并排序 从排序结果的稳定性考虑选择归并排序堆排序和快速排序都是不稳定排序 从平均情况下排序最快考虑先选择快速排序 ()堆排序快速排序归并排序
选择排序(SelectionSort)的基本思想是每一趟从待排序的记录中选出关键字最小的记录顺序放在已排好序的子文件的最后 直到全部记录排序完毕 常用的选择排序方法有直接选择排序和堆排序 直
.就排序算法所用的辅助空间而言堆排序快速排序归并排序的关系是( )【西安交通大学三(分)】 A.堆排序〈 快速排序〈归并排序 B.堆排序
按平均时间将排序分为四类 ()平方阶(O(n))排序 一般称为简单排序例如直接插入直接选择和冒泡排序; ()线性对数阶(O(nlgn))排序 如快速堆和归并排序; ()O(n+£)阶排序
按平均时间将排序分为四类 ()平方阶(O(n))排序 一般称为简单排序例如直接插入直接选择和冒泡排序; ()线性对数阶(O(nlgn))排序 如快速堆和归并排序; ()O(n+£)阶排序
堆排序 堆的定义n个元素的序列kk…kn)当且仅当满足以下关系时称之为堆 若将和序列kk…kn)对应的一维数组(即以一维数组作此序列的存储结构)看成是一个完全二
以关键字序列()为例分别写出执行以下排序算法的各趟排序结束时关键字序列的状态 ()直接插入排序()希尔排序()冒泡排序()快速排序 ()直接选择排序()堆排序()归并排序()基数排序 上述方
以关键字序列()为例分别写出执行以下排序算法的各趟排序结束时关键字序列的状态 ()直接插入排序()希尔排序()冒泡排序()快速排序 ()直接选择排序()堆排序()归并排序()基数排序 上述方
以关键字序列()为例分别写出执行以下排序算法的各趟排序结束时关键字序列的状态 ()直接插入排序()希尔排序()冒泡排序()快速排序 ()直接选择排序()堆排序()归并排序()基数排序 上述方法中哪些