知识大全 排序 - 选择排序 - 堆排序(二)
Posted 知
篇首语:实践是知识的母亲,知识是生活的明灯。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 排序 - 选择排序 - 堆排序(二)相关的知识,希望对你有一定的参考价值。
堆排序
堆排序利用了大根堆(或小根堆)堆顶记录的关键字最大(或最小)这一特征 使得在当前无序区中选取最大(或最小)关键字的记录变得
简单
( )用大根堆排序的基本思想
① 先将初始文件R[ n]建成一个大根堆 此堆为初始的无序区
② 再将关键字最大的记录R[ ](即堆顶)和无序区的最后一个记录R[n]交换 由此得到新的无序区R[ n ]和有序区R[n] 且满足
R[ n ] keys≤R[n] key
③ 由于交换后新的根R[ ]可能违反堆性质 故应将当前无序区R[ n ]调整为堆 然后再次将R[ n ]中关键字最大的记录
R[ ]和该区间的最后一个记录R[n ]交换 由此得到新的无序区R[ n ]和有序区R[n n] 且仍满足关系R[ n
] keys≤R[n n] keys 同样要将R[ n ]调整为堆
……
直到无序区只有一个元素为止
( )大根堆排序算法的基本操作
① 初始化操作 将R[ n]构造为初始堆;
② 每一趟排序的基本操作 将当前无序区的堆顶记录R[ ]和该区间的最后一个记录交换 然后将新的无序区调整为堆(亦称重建堆
)
注意
①只需做n 趟排序 选出较大的n 个关键字即可以使得文件递增有序
②用小根堆排序与利用大根堆类似 只不过其排序结果是递减有序的 堆排序和直接选择排序相反 在任何时刻 堆排序中无序区总
是在有序区之前 且有序区是在原向量的尾部由后往前逐步扩大至整个向量为止
( )堆排序的算法
void HeapSort(SeqIAst R)
//对R[ n]进行堆排序 不妨用R[ ]做暂存单元
int i;
BuildHeap(R); //将R[ n]建成初始堆
for(i=n;i> ;i ) //对当前无序区R[ i]进行堆排序 共做n 趟
R[ ]=R[ ];R[ ]=R[i];R[i]=R[ ]; //将堆顶和堆中最后一个记录交换
Heapify(R i ); //将R[ i ]重新调整为堆 仅有R[ ]可能违反堆性质
//endfor
cha138/Article/program/sjjg/201311/23780相关参考
()BuildHeap和Heapify函数的实现 因为构造初始堆必须使用到调整堆的操作先讨论Heapify的实现 ①Heapify函数思想方法 每趟排序开始前R[li]是以R[]为根的堆在R
堆排序 堆的定义n个元素的序列kk…kn)当且仅当满足以下关系时称之为堆 若将和序列kk…kn)对应的一维数组(即以一维数组作此序列的存储结构)看成是一个完全二
从节省存储空间考虑先选堆排序再选快速排序最后选择归并排序 从排序结果的稳定性考虑选择归并排序堆排序和快速排序都是不稳定排序 从平均情况下排序最快考虑先选择快速排序 ()堆排序快速排序归并排序
选择排序(SelectionSort)的基本思想是每一趟从待排序的记录中选出关键字最小的记录顺序放在已排好序的子文件的最后 直到全部记录排序完毕 常用的选择排序方法有直接选择排序和堆排序 直
()堆排序是对树型选择排序的改进克服了树型选择排序的缺点其定义在前面已多次谈到请参见上面四应用题的题和题()筛选是堆排序的基础算法由于堆可以看作具有n个结点的完全二叉树建堆过程是从待排序序列第一个
按平均时间将排序分为四类 ()平方阶(O(n))排序 一般称为简单排序例如直接插入直接选择和冒泡排序; ()线性对数阶(O(nlgn))排序 如快速堆和归并排序; ()O(n+£)阶排序
希赛教育计算机专业考研专业课辅导招生 希赛教育计算机专业考研专业课辅导视频 希赛教育计算机考研专业课在线测试系统 首先将移至暂存空间R[]将和进行比较后得到的大者与进行比较由于>则应将
按平均时间将排序分为四类 ()平方阶(O(n))排序 一般称为简单排序例如直接插入直接选择和冒泡排序; ()线性对数阶(O(nlgn))排序 如快速堆和归并排序; ()O(n+£)阶排序
以关键字序列()为例分别写出执行以下排序算法的各趟排序结束时关键字序列的状态 ()直接插入排序()希尔排序()冒泡排序()快速排序 ()直接选择排序()堆排序()归并排序()基数排序 上述方
以关键字序列()为例分别写出执行以下排序算法的各趟排序结束时关键字序列的状态 ()直接插入排序()希尔排序()冒泡排序()快速排序 ()直接选择排序()堆排序()归并排序()基数排序 上述方