[理学]内部排序.ppt

  1. 1、本文档共92页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[理学]内部排序

第10 章 内部排序 10.1 基本概念 10.2 插入排序 10.3 交换排序 10.4 选择排序 10.5 归并排序 10.6 基数排序 10.7 各种内排序方法的比较和选择 10.1基本概念 10.1.1排序介绍 排序(Sorting)是数据处理中一种很重要的运算,同时也是很常用的运算,一般数据处理工作25%的时间都在进行排序。简单地说,排序就是把一组记录(元素)按照某个域的值递增(即由小到大)或递减(即由大到小)的次序重新排列的过程。 在学生档案表中,若以每个记录的学号为关键字,按排序码年龄的递增(由小到大)排序,则所有记录的排序结果可简记为: {(99006,16),(99003,17),(99001,18),(99004,18),(99002,19),(99005,20)}; 也可能为: {(99006,16),(99003,17),(99004,18),(99001,18),(99002,19),(99005,20)}; 这两个结果都是按年龄的递增排序结果。若按排序码姓名来进行递增排序,则得到的排序结果为: {(99006,李小燕),(99002,林一鹏),(99001,王晓佳),(99003,谢宁),(99004,张丽娟),(99005,周涛)} 当然,我们还可以按排序码性别来进行递增排序,在此不再作进一步的分析。 10.1.2 基本概念 1. 排序码(sort key) 作为排序依据的记录中的一个属性。它可以是任何一种可比的有序数据类型,它可以是记录的关键字,也可以是任何非关键字。如上例中的学生年龄。在此我们认为对任何一种记录都可找到一个取得它排序码的函数Skey(一个或多个关键字的组合)。 2. 有序表与无序表 一组记录按排序码的递增或递减次序排列得到的结果被称之为有序表,相应地,把排序前的状态称为无序表。 3. 正序表与逆序表 若有序表是按排序码升序排列的,则称为升序表或正序表,否则称为降序表或逆序表。不失普遍性,我们一般只讨论正序表。 4. 排序定义 若给定一组记录序列r1 ,r2 ,…,rn,其排序码分别为s1,s2 ,…,sn ,将这些记录排成顺序为rk1 ,rk2 ,…,rkn的一个序列R,满足条件sk1≤sk2≤ …≤skn,获得序列R的过程称为排序。 也可以说,将一组记录按某排序码递增或递减排列的过程,称为排序。 5. 稳定与不稳定 因为排序码可以不是记录的关键字,同一排序码值可能对应多个记录。对于具有同一排序码的多个记录来说,若采用的排序方法使排序后记录的相对次序不变,则称此排序方法是稳定的,否则称为不稳定的。在上例中(按年龄排序),如果一种排序方法使排序后的结果必为前一个结果,则称此方法是稳定的;若一种排序方法使排序后的结果可能为后一个结果,则称此方法是不稳定的。 6. 内排序与外排序 按照排序过程中使用内外存的不同将排序方法分为内排序和外排序。 若排序过程全部在内存中进行,则称为内排序; 若排序过程需要不断地进行内存和外存之间的数据交换,则称为外排序。 内排序大致可分为五类:插入排序、交换排序、选择排序、归并排序和分配排序。 本章仅讨论内排序。 7. 排序的时间复杂性 排序过程主要是对记录的排序码进行比较和记录的移动过程。因此排序的时间复杂性可以算法执行中的数据比较次数及数据移动次数来衡量。 当一种排序方法使排序过程在最坏或平均情况下所进行的比较和移动次数越少,则认为该方法的时间复杂性就越好,分析一种排序方法,不仅要分析它的时间复杂性,而且要分析它的空间复杂性、稳定性和简单性等。 为了以后讨论方便,我们直接将排序码写成一个一维数组的形式,具体类型设为ElemType,并且在没有声明的情形下,所有排序都按排序码的值递增排列。 排序方法分类: ①插入排序(直插排序、二分排序、希尔排序); ②交换排序(冒泡排序、快速排序); ③选择排序 (直选排序、树型排序、堆排序); ④归并排序(二路归并排序、多路归并排序); ⑤分配排序 (多关键字排序、基数排序)。 10.2 插入排序 10.2.1 直接插入排序 1. 直接插入排序的基本思想 直接插入排序(Straight Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。 例如,n=6,数组R的六个排序码分别为:17,3,25,14,20,9。它的直接插入排序的执行过程如图所示。 2. 直接插入的算法实现 //待排序元素用一个数组R表示,数组有n个元素 void InsertSort(ElemType R[ ],

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档