第10章 排序(new)课件.pptVIP

  1. 1、本文档共107页,可阅读全部内容。
  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章 排序(new)课件

第十章 内部排序;排序是计算机程序设计中的一种重要操作; 功能是将一个包含若干数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列。 例如:将下列关键字序列 52, 49, 80, 36, 14, 58, 61, 23, 97, 75 调整为 14, 23, 36, 49, 52, 58, 61 ,75, 80, 97;假设含n个记录的序列为{ R1, R2, …, Rn } 其相应的关键字序列为 { K1, K2, …,Kn } 这些关键字相互之间可以进行比较,即在它们之间存在着这样一个非递减的关系关系 :   Kp1≤Kp2≤…≤Kpn 按此固有关系将上式记录序列重新排列为 { Rp1, Rp2, …,Rpn } 的操作称作排序。;关键字可以是记录的主关键字,也可以是次关键字,甚至是若干数据项的的组合。 若是主关键字,则任何一个记录的无序序列经排序后得到的结果是唯一的。 若是次关键字,因待排序序列中可能存在两个或两个以上关键字相同的记录,则排序的结果不唯一。 对于具有相同关键字的多个记录来说,若采用的排序方法使排序后记录的相对次序不变,则称此排序方法是稳定的,否则称所用的排序方法是不稳定的。;二、内部排序和外部排序;按照排序过程中依据的原则,把内部排序分为: 插入排序 快速排序 选择排序 归并排序 基数排序 按内部排序过程中所需的工作量,分为: 简单的排序方法,时间复杂度为O(n2) 先进的排序方法,时间复杂度为O(nlogn) 基数排序,时间复杂度为O(d·n);待排序记录的存储方式: 1. 存放在一组地址连续的存储单元中,即顺序存储方式;可以用一维数组来表示,数组的第0个单元空闲或者作为哨兵单元,记录之间的次序关系由其存储位置决定。 在排序过程中,需要进行两种基本操作: (1)比较两个关键字的大小; (2)将记录从一个位置移动到另一个位置。 2. 存放在静态链表中,记录之间的次序关系由指针指示,实现排序不需移动记录,仅需修改指针即可。;待排序记录的存储方式: 3. 存放在一组地址连续的存储单元中,同时另设一个指示各个记录存储位置的地址向量,排序过程不移动记录本身,移动地址向量中记录的“地址”,排序结束后再按照地址向量中的值调整记录的存储位置。 本章算法假设:顺序存储,且关键字为整数。;待排记录的数据类型定义如下: #define MAXSIZE 1000 // 待排顺序表最大长度 typedef struct { int key; // 关键字项 InfoType otherinfo; // 其它数据项 } RcdType; // 记录类型 typedef struct { RcdType r[MAXSIZE+1]; // r[0]闲置 int length; // 顺序表长度 } SqList; // 顺序表类型;排序的时间复杂性 排序过程主要是对记录的关键字进行比较和记录的移动过程。 因此排序的时间复杂性可以算法执行中的数据比较次数及数据移动次数来衡量。 当一种排序方法使排序过程在最坏或平均情况下所进行的比较和移动次数越少,则认为该方法的时间复杂性就越好; 分析一种排序方法,不仅要分析它的时间复杂性,而且要分析它的空间复杂性、稳定性和简单性等。;直接插入排序 折半插入排序 希尔排序;10.2.1 直接插入排序;有序序列R[1..i-1];实现“一趟插入排序”可分三步进行: 1.在R[1..i-1]中查找R[i]的插入位置, R[1..j].key ? R[i].key R[j+1..i-1].key; 2.将R[j+1..i-1]中的所有记录均后移一个位置; 3.将R[i] 插入(复制)到R[j+1]的位置上。;算法实现 void InsertionSort ( SqList L ) { // 对顺序表 L 作直接插入排序。 for ( i=2; i=L.length; ++i ) if (L.r[i].key L.r[i-1].key) { L.r[0] = L.r[i]; // 复制为监视哨 for ( j=i-1; L.r[0].key L.r[j].key; -- j ) L.r[j

文档评论(0)

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

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

1亿VIP精品文档

相关文档