第10章 排序09.pptVIP

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第10章 排序09

二路归并排序算法实现 1、void twomerge(int A[],int R[],int s,int m,int t) 进行一次二路归并。 将A数组中的s~m和m+1~t这两个相邻的有续表,合并成一个 存储在R数组的s到t位置。 2、void mergepass(int A[],int R[],int n,int len ) 进行一趟二路归并,把数组A中长度为len的有续表两两归并 到R数组中。 3、void mergesort(int A[],int n) 进行多趟二路归并,完成二路归并排序算法。 作业 书面作业:习题10-1 例如,给定排序码46,55,13,42,84,05,17,70,二路归并排序过程如图10所示。 3.二路归并排序的效率分析 要进行那个O(log2n)趟二路归并。 每一趟归并的比较移动次数均等于数组中记录的个数n,即每一趟归并的时间复杂度为O(n)。 因此,二路归并排序的时间复杂度为O(nlog2n)。 利用二路归并排序时,需要利用与待排序数组相同的辅助数组作临时单元,故该排序方法的空间复杂度为O(n),比前面介绍的其它排序方法占用的空间大。 由于二路归并排序中,每两个有序表合并成一个有序表时,若分别在两个有序表中出现有相同排序码,则会使前一个有序表中相同排序码先复制,后一有序表中相同排序码后复制,从而保持它们的相对次序不会改变。所以,二路归并排序是一种稳定的排序方法。 使用时,直接删除本页! 精品课件,你值得拥有! 精品课件,你值得拥有! * 目录 10.1 基本概念 10.2 插入排序 10.4 交换排序 10.3 选择排序 10.5 归并排序 10.1 基本概念 排序(SoAting)是数据处理中一种很重要的运算,同时也是很常用的运算,一般数据处理工作25%的时间都在进行排序。简单地说,排序就是把一组记录(元素)按照某个域的值的递增(即由小到大)或递减(即由大到小)的次序重新排列的过程。 表1 学生档案表 学号 姓名 年龄 性别 88001 王晓佳 18 男 88002 林一鹏 18 男 88003 谢宁 17 女 88004 张丽娟 18 女 88005 周涛 20 男 88006 李小燕 16 女 例如,在表1中,按排序码年龄的递增(由小到大)排序,则所有记录的排序结果可简记为: {(88006,16),(88003,17),(88001,18),(88004,18),(88002,18),(88005,20)}; 也可能为: {(88006,16),(88003,17),(88001,18),(88002,18),(88004,18),(88005,20)}; 这两个结果都是表1按年龄的递增排序结果。 若按排序码姓名来进行递增排序,则得到的排序结果为: {(88006,李小燕),(88002,林一鹏),(88001,王晓佳),(88003,谢宁),(88004,张丽娟),(88005,周涛)} 当然,我们还可以按排序码性别来进行递增排序,在此不再作进一步的分析。 1.排序域(项)和排序码(SoAt Key) 作为排序依据的记录中的一个数据域(项)。它可以是记录的关键字,也可以是任何非关键字。如上例中的学生年龄、姓名。排序域中的每一个值为排序码。在以后的讨论中,假定排序域的域名为stn。 2.有序表与无序表 一组记录按排序码的递增或递减次序排列得到的结果被称之为有序表,相应地,把排序前的状态称为无序表。 3.正序表与逆序表 若有序表是按排序码升序排列的,则称为升序表或正序表,否则称为降序表或逆序表。不失普遍性,我们一般只讨论正序表。 4.稳定与不稳定 因为排序码可以不是记录的关键字,同一排序码值可能对应多个记录。对于具有同一排序码的多个记录来说,若采用的排序方法使排序后记录的相对次序不变,则称此排序方法是稳定的,否则称为不稳定的。在上例中(见表1,按年龄排序),按照年龄排序,前一种是不稳定的,后一种是稳定的。 5.内排序与外排序 按照排序过程中使用内外存的不同将排序方法分为内排序和外排序。若排序过程全部在内存中进行,则称为内排序;若排序过程需要不断地进行内存和外存之间的数据交换,则称为外排序。内排序大致可分为五类:插入排序、交换排序、选择排序、归并排序和分配排序。本章仅讨论内排序中前四类中的一些常用算法。 6.排序的时间复杂性 排序过程主要是对记录的排序码进行比较和记录的移动过程。因此排序的时间复杂性可以算法执行中的数据比较次数及数据移动次数来衡量。当一种排序方法使排序过程在最坏或平均情况下所进行的比较和移动次数越少,则认为该方法的时间复杂性就越好,分析一种排序方法,不仅要分析它的时间复

文档评论(0)

xiaolan118 + 关注
实名认证
文档贡献者

你好,我好,大家好!

版权声明书
用户编号:7140162041000002

1亿VIP精品文档

相关文档