- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第7章 排序关 sorting[严陈]第3章
第7章 排序 Sorting [严陈]第3章 内容提要 排序的基本概念 排序算法的分析 插入排序(直接,二分) 交换排序(冒泡,快速) 选择(selection,堆排序) 归并(merge) 基数排序 基本概念 排序:将一组杂乱无章的数据按一定的规律顺次排列起来。 数据表( data list): 它是待排序数据对象的有限集合。 排序码(key):通常数据对象有多个属性域 ,即多个数据成员组成,其中有一个属性域可用来区分对象,作为排序依据。该域即为排序码。每个数据表用哪个属性域作为排序码,要视具体的应用需要而定。 分类 内排序与外排序 内排序是指在排序期间数据对象全部存放在内存的排序; 外排序是指在排序期间全部对象个数太多,不能同时存放在内存,必须根据排序过程的要求,不断在内、外存之间移动的排序。 排序算法的稳定性 如果在对象序列中有两个对象r[i]和r[j] ,它们的排序码k[i] ==k[j] , 稳定的:排序前后,对象r[i]和r[ j]的相对位置不变 不稳定:else 算法评价 时间开销: 排序的时间开销可用算法执行中的数据比较次数与数据移动次数来衡量。 算法运行时间代价的大略估算一般都按平均情况进行估算。对于那些受对象排序码序列初始排列及对象个数影响较大的,需要按最好情况和最坏情况进行估算 空间开销:算法执行时所需的附加存储 插入排序 插入排序(Insert Sorting) 基本方法是:每步将一个待排序的对象,按其排序码大小,插入到前面已经排好序的一组对象的适当位置上,直到对象全部插入为止。 根据寻找插入位置方法分为 直接 折半 希尔 直接插入排序 (Insert Sort ) 基本思想是: 当插入第i(i≥ 1)个对象时,前面的V[0] , V[1] , …, V[i-1]已经排好序。这时,用V[i]的排序码与V[i- 1], V[i-2] , …的排序码顺序进行比较,找到插入位置即将V[i]插入,原来位置上的对象向后顺移 直接插入排序 直接插入排序 直接插入排序:算法分析 设待排序对象个数为n,则该算法的主程序执行n-1趟排序码比较次数和对象移动次数与对象排序码的初始排列有关 最好情况下,排序前对象有序 比较(KCN):n-1 ; 移动次数(RMN):为2(n-1) 最坏情况下,第i趟时第i个对象必须与前面i个对象都做排序码比较,并且每做1次比较就要做1次数据移动。 在平均情况下的排序码比较次数和对象移动次数约为n2/4。因此,直接插入排序的时间复杂度为o( n2) 直接插入排序是一种稳定的排序方法 二分插入排序(Binary Insert sort) 基本思想是:设在顺序表中有一个对象序列V[0], V[1], …, V[ n- 1]。其中, V[0],V [1] , …, V[i- 1]是已经排好序的对象。在插入V[i]时,利用二分搜索法寻找V[i]的插入位置。 二分插入排序 二分插入排序:分析 二分搜索比顺序搜索查找快,所以二分插入排序就平均性能来说比直接插入排序要快。 它所需的排序码比较次数与待排序对象序列的初始排列无关,仅依赖于对象个数。在插入第i个对象时,需要经过log2 i +1次排序码比较,才能确定它应插入的位置。因此,将n个对象(为推导方便,设为n =2 k )用折半插入排序所进行的排序码比较次数为 二分插入排序是一个稳定的排序方法。 当n较大时,总排序码比较次数比直接插入排序的最坏情况要好得多,但比其最好情况要差。 在对象的初始排列已经按排序码排好序或接近有序时,直接插入排序比折半插入排序执行的排序码比较次数要少。折半插入排序的对象移动次数与直接插入排序相同,依赖于对象的初始排列 使用链表插入排序 每插入一个对象,最大排序码比较次数等于链表中已排好序的对象个数 最小排序码比较次数为1 故总的排序码 比较次数最小为(n-1) 最大为 移动次数为0 空间增加了指针域,和头结点 交换排序 交换排序 数据两两比较,逆序交换,直到全部有序 冒泡,快速 冒泡排序 (Bubble Sort) 对象个数n。最多作最多作n-1趟, i= 1, 2, …, n-1 i趟中从后向前j= n-1, n-2, ……, i,顺次两两比较 比较如果发生逆序,则 交换V[ j-1] 和V[ j]。 Void BubbleSort(int * data ,int n) { i=0; while(in-1) { last=n-1; for (j=n-1;ji;j--) If(data[j]data[j-1]){ 交换数据;last=j;} i=last; } } 算法分析 最好:n-1次比较,移动为0 最坏 需要一个附加空间 稳定
您可能关注的文档
- 第05章路由但器基时础及配置v.doc
- 第5章 adamsview呢虚拟样机仿真分析 5.1 adamsview函数 5.2 设计变量的创建 5.3 虚拟样机参数化 5.4 约束函数的创建 5.5 目标函数的创建 5.6 仿真剧本创建 5.7 虚拟样机优化分析设置 5.8 求解器(optimizer)设置 5.9 图形显示(display)设置 5.10 文件输出(output)设置 5.11 检查参数化分析结果.ppt
- 第5章 点上水闸自测题.doc
- 第5章 对面向对象程序设计.ppt
- 第3章四 交通都量分析.doc
- 第5章 关系数发据库标准语言—sql.ppt
- 第4章上 条习题解.doc
- 第05章 fl发u的ent网格.doc
- 第5章 你 lpc2000系列arm硬件结构.ppt
- 第5章 循环时结构关程序设计.doc
原创力文档


文档评论(0)