知识大全 排序 - 归并排序(一)
Posted 文件
篇首语:最关情,折尽梅花,难寄相思。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 排序 - 归并排序(一)相关的知识,希望对你有一定的参考价值。
归并排序(Merge Sort)是利用 归并 技术来进行排序 归并是指将若干个已排序的子文件合并成一个有序的文件
两路归并算法
算法基本思路
设两个有序的子文件(相当于输入堆)放在同一向量中相邻的位置上 R[low m] R[m+ high] 先将它们合并到一个局部的暂
存向量R (相当于输出堆)中 待合并完成后将R 复制回R[low high]中
( )合并过程
合并过程中 设置i j和p三个指针 其初值分别指向这三个记录区的起始位置 合并时依次比较R[i]和R[j]的关键字 取关键
字较小的记录复制到R [p]中 然后将被复制记录的指针i或j加 以及指向复制位置的指针p加
重复这一过程直至两个输入的子文件有一个已全部复制完毕(不妨称其为空) 此时将另一非空的子文件中剩余记录依次复制到
R 中即可
( )动态申请R
实现时 R 是动态申请的 因为申请的空间可能很大 故须加入申请空间是否成功的处理
归并算法
void Merge(SeqList R int low int m int high)
//将两个有序的子文件R[low m)和R[m+ high]归并成一个有序的
//子文件R[low high]
int i=low j=m+ p= ; //置初始值
RecType *R ; //R 是局部向量 若p定义为此类型指针速度更快
R =(ReeType *)malloc((high low+ )*sizeof(RecType));
if(! R ) //申请空间失败
Error( Insufficient memory available! );
while(i<=m&&j<=high) //两子文件非空时取其小者输出到R [p]上
R [p++]=(R[i] key<=R[j] key)?R[i++] R[j++];
while(i<=m) //若第 个子文件非空 则复制剩余记录到R 中
R [p++]=R[i++];
while(j<=high) //若第 个子文件非空 则复制剩余记录到R 中
R [p++]=R[j++];
for(p= i=low;i<=high;p++ i++)
R[i]=R [p];//归并完成后将结果复制回R[low high]
cha138/Article/program/sjjg/201311/23778相关参考
归并排序 归并排序有两种实现方法自底向上和自顶向下 自底向上的方法 ()自底向上的基本思想 自底向上的基本思想是第趟归并排序时将待排序的文件R[n]看作是n个长度为的有序子文件将这些子文件
自顶向下的方法 采用分治法进行自顶向下的算法设计形式更为简洁 ()分治法的三个步骤 设归并排序的当前区间是R[lowhigh]分治法的三个步骤是 ①分解将当前区间一分为二即求分裂点 >
.设有N个记录的一个文件经内部排序后得到个初始归并段 ()试问在四台磁带机上分别用平衡归并和多步归并进行外部排序各需要多少趟归并? ()给出多步归并排序前五趟归并的情况(分)【北方交通大学六(
.给定个权值集合()画出含有个叶子结点的最佳三叉归并树并计算出wpl=?【东北大学一(分)】 类似本题的另外叙述有 ()假设有个初始归并段其长度分别为;现要作路外部归并排序试画出表示归并过程的
给出一组关键字分别写出按下列各种排序方法进行排序时的变化过程【南开大学八(分)】 ()归并排序 每归并一次书写一个次序 ()快速排序 每划分一次书写
按平均时间将排序分为四类 ()平方阶(O(n))排序 一般称为简单排序例如直接插入直接选择和冒泡排序; ()线性对数阶(O(nlgn))排序 如快速堆和归并排序; ()O(n+£)阶排序
从节省存储空间考虑先选堆排序再选快速排序最后选择归并排序 从排序结果的稳定性考虑选择归并排序堆排序和快速排序都是不稳定排序 从平均情况下排序最快考虑先选择快速排序 ()堆排序快速排序归并排序
按平均时间将排序分为四类 ()平方阶(O(n))排序 一般称为简单排序例如直接插入直接选择和冒泡排序; ()线性对数阶(O(nlgn))排序 如快速堆和归并排序; ()O(n+£)阶排序
归并排序 ·先两个一组排序形成(n+)/组再将两组并一组直到剩下一组为止 ·归并排序是非就地稳定排序时间复杂度是O(nlogn) 分配排序 箱排序 ·按关键字的取值范围确定箱子数按关键字
希赛教育计算机专业考研专业课辅导招生 希赛教育计算机专业考研专业课辅导视频 希赛教育计算机考研专业课在线测试系统 voidMsort(RcdTypeSR[]RcdTypeTR[]intsin