- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构10
void MergeSort(SqList L) { MSort(L.r, L.r, 1, L.length); } // MergeSort 算法10.14 对顺序表L作归并排序 mergepass(rectype r[ ], rectype r1[ ],int length) /*对R做一趟归并,结果放在R1中*/ { int i, j; i=0; while (i+2*length-1n) { merge(r,r1,i,i+length-1,i+2*length-1); i=i+2*length; /*剩余部分的起点*/ } if (i+length-1n-1) /*其中后部长度小于length*/ merge(r,r1,i,i+length-1,n-1); else /*只有一个长度小于length的部分*/ for(j=i;jn;j++) r1[j]=r[j]; } 一趟归并的非递归算法(存储结构没改) Mergesort(r,r1) rectype r[],r1[] { int length; length=1; while (lengthn) { mergepass(r,r1,length); length=2*length; mergepass(r1,r,length); length=2*length; } } 二路归并-----算法 第i趟归并后,有序子文件长度为2i,因此,对有n个记录的文件排序,必须做 趟归并,每趟归并所花的时间是O(n); 二路归并排序的时间复杂性为O(nlog2n )。 归并排序是稳定的。 归并排序分析 10.6基数排序 基数排序:是一种借助于多关键码排序的思想,是将单关键码按基数分成“多关键码”进行排序的方法。 10.6.1 多关键字排序 多关键码排序按照从最主位关键码到最次位关键码或从最次位到最主位关键码的顺序逐次排序,分两种方法: 最高位优先(Most Significant Digit first)法,简称MSD法:先按k0排序分组,同一组中记录,关键码k0相等,再对各组按k1排序分成子组,之后,对后面的关键码继续这样的排序分组,直到按最次位关键码kd-1对各子组排序后。再将各组连接起来,便得到一个有序序列。扑克牌按花色、面值排序中介绍的方法一即是MSD法。 最低位优先(Least Significant Digit first)法,简称LSD法:先从kd-1开始排序,再对kd-2进行排序,依次重复,直到对k0排序后便得到一个有序序列。扑克牌按花色、面值排序中介绍的方法二即是LSD法。 10.6.2链式基数排序 将关键码拆分为若干项,每项作为一个“关键码”,则对单关键码的排序可按多关键码排序方法进行。 基数排序:从最低位关键码起,按关键码的不同值将序列中的记录“分配”到RADIX个队列中,然后再“收集”之。如此重复d次即可。 链式基数排序是用RADIX个链队列作为分配队列,关键码相同的记录存入同一个链队列中,收集则是将各链队列按关键码大小顺序链接起来。 #define MAX_KEY_OF_NUM 8 /*关键码项数最大值*/ #define RADIX 10 /*关键码基数 */ #define MAX_SPACE 10000 /*分配的最大可利用存储空间*/ typedef struct { KeyType keys[MAX_KEY_OF_NUM];/*关键码字段*/ InfoType otheritems; /*其它字段*/ int next; /*指针字段*/ }SLCell; /*表结点类型*/ typedef struct { SLCell r[MAX_SPACE]; /*静态链表,r[0]为头结点*/ int keynum; /*关键码个数*/ int recnum; /*当前表中记录数*/ }SLList; /*静态链表类型*/ typedef int ArrayType[radix]; /*数组指针,分别指向各队列*/ 参考 P286 算法10.15 算法10.16 算法10.17 起泡排序---------效率分析 空间效率:仅用了一个辅助单元。 时间效率: 最好情况下:仅需要一次扫描,即n-1次比较 待排序
您可能关注的文档
最近下载
- 人教版道德与法治三年级上册第10课《公共场所的文明素养》第1课时 公共场所在哪里 教学课件.pptx VIP
- 预应力混凝土折线形屋架施工技术.pdf VIP
- 2019年新版GB T50502《建筑施工组织设计规范》.pdf VIP
- 人教版初中足球教学教案大全1.doc VIP
- 河北省专业技术职务任职资格考核认定表.doc VIP
- 新视野大学英语(第三版)读写教程BookI-Unit1-Section A-Toward a brighter future for all.ppt VIP
- 在线分析仪表专题培训课件.ppt VIP
- 任务认识布线缆线及其连接件.pptx VIP
- 投资人工智能领域核心标的:易方达中证人工智能ETF投资价值分析-20200925-国信证券-23页.pdf VIP
- 软件安装调试记录表模板.docx VIP
原创力文档


文档评论(0)