第9章-归并排序_第1页
第9章-归并排序_第2页
第9章-归并排序_第3页
第9章-归并排序_第4页
第9章-归并排序_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9章内部排序,9.1排序的基本概念,9.2插入类排序,9.3交换类排序法,9.4选择类排序法,9.5归并排序,9.6分配类排序,9.7各种排序方法的综合比较,9.8总结与提高,9.5归并排序,基本思想:将两个或两个以上有序表合并成一个新的有序表。假设初始序列含有n个记录,首先将这n个记录看成n个有序的子序列,每个子序列的长度为1;然后两两归并,得到n/2个长度为2(n为奇数时,最后一个序列的长度为1)的有序子序列;在此基础上,再进行两两归并,如此重复,直至得到一个长度为n的有序序列为止。这种方法被称作2-路归并排序。,归并排序的示例为:,4,8,7,3,2,6,5,1,a:,b:,s=1,s=2,a:,s=4,b:,s=8,稳定的排序算法,voidMerge(RecordTyper1,intlow,intmid,inthigh,RecordTyper2)/*已知r1low.mid和r1mid+1.high分别按关键字有序排列,将它们合并成一个有序序列,存放在r2low.high*/i=low;j=mid+1;k=low;while(i=mid),2路归并排序算法,.while(i=mid)r2k=r1i;k+;i+;while(j=high)r2k=r1j;k+;j+;/*Merge*/,2路归并排序算法,2-路归并排序可以采用递归方法实现:,首先将r1前半段的记录用归并法排序后放到r2的前半段;将r1后半段的记录用归并法排序后放到r2的后半段;将r2的前半段和后半段合并到r3中。,voidMergeSort(RecordTyper,intn)/*对记录数组r1.n做归并排序*/MSort(r,1,n,r);,递归算法,voidMSort(RecordTyper1,intlow,inthigh,RecordTyper3)/*r1low.high经过排序后放在r3low.high中,r2low.high为辅助空间*/RecordTyper220;if(low=high)r3low=r1low;elsemid=(low+high)/2;MSort(r1,low,mid,r2);MSort(r1,mid+1,high,r2);Merge(r2,low,mid,high,r3);/*MSort*/,递归算法,假设:前后相邻的有序段长度为h,进行两两归并后,得到长度为2h的有序段。那么一趟归并排序将调用n/2h次算法merge将r11n存放在r1n中。因此时间复杂度为O(n)。整个归并排序需进行m(m=log2n)趟2-路归并,所以归并排序总的时间复杂度为O(nlog2n)在实现归并排序时,需要和待排记录等数量的辅助空间,空间复杂度为O(n)。,算法分析:,类似2-路归并排序,可设计多路归并排序法,归并的思想主要用于外部排序。外部排序可分两步,待排序记录分批读入内存,用某种方法在内存排序,组成有序的子文件,再按某种策略存入外存。子文件多路归并,成为较长有序子文件,再记入外存,如此反复,直到整个待排序文件有序。外部

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论