- 1、本文档共107页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
8.1 排序的基本概念 8.1.2 排序算法的效率分析 8.2 插入排序 8.2.1 直接插入排序 8.2.2 折半插入排序 8.2.3 希尔排序 8.3交换排序 8.3.3 快速排序 8.4选择排序 8.4.2 堆排序 8.5归并排序 8.6基数排序 8.7外部排序 8.7.1外部排序过程 8.7.2多路平衡归并 8.7.3置换一选择排序 8.8各种排序方法的比较 本章小结 (e) 重建堆,筛选56下移两层 (f)交换24和48 (g) 重建堆,筛选48下移一层 (h)交换37和61 (i) 重建堆,筛选61下移一层 (j) 交换37和56 (k)重建堆,筛选56下移一层 (l) 交换48和61 (m) 重建堆,筛选61下移一层 (n) 交换56和61 图8-10 堆排序示例 对堆排序算法主要由建立初始堆和反复重建堆两部分构成,它们均通过调用Sift()实现。假设具有n个记录的初始序列对应的完全二叉树的深度为h= ,则在建立初始堆时,对每一个非叶子结点都要从上到下做“筛选”,则建立初始堆的总比较次数C1为: ≤ 其时间复杂度为O(n)。n个结点完全二叉树的深度为 ,n-1次建新堆的总比较次数C2为: ≤ ≤ 堆排序所需的关键字比较的总次数是: + = O(nlog2n) 类似地,可求出堆排序所需的记录移动的总次数为:O(nlog2n),因此堆排序的最坏时间复杂度为O(nlog2n)。堆排序算法一般适合于待排序记录数比较多的情况。 堆排序需要一个辅助空间,所以空间复杂度为O(1)。 堆排序也是不稳定排序。 归并排序(Merge Sort)也是一种常用的排序方法,“归并”的含义是将两个或两个以上的有序表合并成一个新的有序表。如图8-11为两组有序表的归并,有序表{4,25,34,56,69,74}和{15,26,34,47,52},通过归并把它们合并成一个有序表{4,15,25,26,34,34, 47,52, 56,69,74}。 图8-11 两组有序表的归并 二路归并排序的基本思想是:将有n个记录的待排序列看作n个有序子表,每个有序子表的长度为1,然后从第一个有序子表开始,把相邻的两个有序子表两两合并,得到n/2个长度为2或1的有序子表(当有序子表的个数为奇数时,最后一组合并得到的有序子表长度为1),这一过程称为一趟归并排序。再将有序子表两两归并,如此反复,直到得到一个长度为n的有序表为止。上述每趟归并排序都需要将相邻的两个有序子表两两合并成一个有序表,这种归并方法称为二路归并排序。 1.两个有序表的合并算法Merge( )。 设线性表R[low..m],和R[m+1..high]是两个已排序的有序表,存放在同一数组中相邻的位置上,将它们合并到一个数组Rl中,合并过程如下: (1) 比较线性表R[low..m]与R[m+1..high]的第一个记录,将其中关键字值较小的记录移入表R1(如果关键字值相同,可将R[low..m]的第一个记录移入R1中)。 (2) 将关键字值较小的记录所在线性表的长度减1,并将其后继记录作为该线性表的第一个记录。 反复执行上述过程,直到线性表R[low..m]或R[m+1..high]之一成为空表,然后将非空表中剩余的记录移入R1中,此时Rl成为一个有序表。 算法描述如下: void Merge(RecType R[],RecType R1[],int low,int m,int high) { //R[low..m]和R[m+1..high]是两个有序表 int i=low, j=m+l, k=low; //k是Rl的下标,i、j分别为R[low..m]和R[m+1..high]的下标 while(i=mj=high){ //在R[low..m]和R[m+1..high]均未扫描完时循环 if(R[i].key=R[j].key){ //将R[low..m]中的记录放入R1中 R1[k]=R[i]; i++; k++; } else{ //将R[m+1..high]中的记录放入R1中 R1[k]=R[j]; j++; k++; } } while(i=m){ //将R[low..m]余下部分复制到R1 R1[k]=R[i]; i++; k++; } while(j=high){
您可能关注的文档
- 扭矩的正负号规定为.ppt
- 扬帆启航小学毕业典礼.ppt
- 找出带有动物的成语.ppt
- 技巧含有修辞.ppt
- 技术与设计——无针注射器的原理.ppt
- 技术分析指标的背离特征.ppt
- 技术创新和企业战略.ppt
- 技能训练3单片机指令的执行.ppt
- 把句子和被句子.ppt
- 把握时代脉搏作文.ppt
- 数据仓库:Redshift:Redshift与BI工具集成.docx
- 数据仓库:Redshift:数据仓库原理与设计.docx
- 数据仓库:Snowflake:数据仓库成本控制与Snowflake定价策略.docx
- 大数据基础:大数据概述:大数据处理框架MapReduce.docx
- 实时计算:GoogleDataflow服务架构解析.docx
- 分布式存储系统:HDFS与MapReduce集成教程.docx
- 实时计算:Azure Stream Analytics:数据流窗口与聚合操作.docx
- 实时计算:Kafka Streams:Kafka Streams架构与原理.docx
- 实时计算:Kafka Streams:Kafka Streams连接器开发与使用.docx
- 数据仓库:BigQuery:BigQuery数据分区与索引优化.docx
最近下载
- 纸电融合背景下高校图书馆中文图书纸电协调采购的现状与对策研究.docx VIP
- 2023广东中山市人大常委会办公室招聘雇员1人笔试备考试题及答案解析.docx VIP
- DDI 有效沟通学员手册.doc VIP
- 《疼痛评估工具》课件.ppt VIP
- 动物皮水解复合酶及其在动物皮提取胶原蛋白中的应用.pdf VIP
- 《中国传统文化》课件 2.2 道家思想及其人生模式.pptx
- 消防泵房分项工程技术交底.docx VIP
- 黄岭尾矿库安全风险辨识评估报告.doc VIP
- 专题08 整本书阅读(全国通用)(解析版)十年(2016-2025)高考语文真题分类汇编.docx
- 三星级高中评估标准及评价细则.docx VIP
文档评论(0)