数据结构(C语言版) 高佳琴 第8章 排序.pptxVIP

数据结构(C语言版) 高佳琴 第8章 排序.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第八章 排序 高佳琴 2014年 2月 7日 本章要点 排序的基本概念 直接插入排序基本思路及算法实现。 冒泡排序基本思路及算法实现。 简单选择排序基本思路及算法实现。 快速排序基本思路及算法实现 “学生成绩排序”引例:在奖学金发放及学生评优评先过程中,班主任需要对学生成绩按总分进行排序。如表8-1所示为12软件1班学生本学期成绩汇总表,现在需要按成绩和学号分别进行排序。 表8-1 12软件1班学生成绩汇总表 思考:1. 排序的目的是为了便于查找或为了适应某些查找算法的需要,排序操作是一类最常用的算法之一。可以有哪些常用的排序算法? 8.1 “学生成绩排序”案例导入 学号 姓名 高等数学 大学英语 C语言程序设计 计算机基础 总分 12rj101 王志 76 80 85 90 331 12rj103 陈鹏 88 66 70 88 312 12rj122 黄小琴 78 78 72 90 318 12rj135 周磊 65 67 76 80 285 12rj112 张勇 90 85 90 85 350 8.2 排序基本概念及分类 排序的功能是将一组任意序列的数据元素(或记录),重新排列成一个按关键字递增或递减序列。 关键字是指作为排序依据的某个数据项或数据项的组合。 学生成绩排序中如果要按总分进行排序,总分就是关键字,如果要按学号进行排序,学号就是关键字。如果先按总分,在总分相同的情况下再按学号进行排序,那么,“总分+学号”就是组合关键字。 假设含n个记录的序列为 {r1,r2,…,rn},其相应的关键字序列为{k1,k2,…,kn},调整序列{r1,r2,…,rn }中各元素的次序得到一个新序列{r11,r12,…,r1n},使其相应的关键字满足如下关系: k11≤K12≤…≤K1n(按关键字递增排序) or k11≥K12≥…≥K1n(按关键字递减排序) 8.2.1 排序的定义 排序按照稳定性分类可划分为:稳定排序和不稳定排序。 假设Ki=Kj(1≤i≤ n,1≤j≤n,i!=j),且在排序前的序列中ri领先于rj(即ij)。若在排序后的序列中ri仍领先于rj,则称所用的排序方法是稳定的;反之,若可能使排序后的序列中rj领先于ri,则称所用的排序方法是不稳定的。 通俗地讲,当关键字不相同时,排序结果是惟一的。而在待排序数据元素中,若存在多种关键字相同的数据元素,经过排序后,这些具有相关关键字的数据元素相对次序保持不变,则称这种排序方法为稳定排序。如果相对次序有可能发生变化,则称这种排序是不稳定排序。 8.2.2 按稳定性分类 根据在排序过程中涉及的存储器不同将排序分为两类:内部排序和外部排序。 内部排序:指待排序文件或相关数据量较少,排序过程可以一次在内存中完成。 外部排序:指待排序文件或相关数据量较大,排序过程不能一次在入内存中完成,排序过程中还需访问外存储器。 内部排序是外部排序的基础,本教程仅讨论内部排序。 8.2.3 按存储位置分类 内部排序方法很多,但无论是哪种排序过程,通常都要进行两种基本操作。 比较两个记录关键字的大小。 根据比较结果,将记录从一个位置移到另一个位置。 因此,在分析排序算法的时间复杂度时,基本操作为关键字比较和记录移动。 8.2.4 排序算法效率分析 为了便于实现和讨论,我们将待排序文件看成是顺序存储的线性表,并假定是要按关键字递增排序。 数据元素定义如下: #define MAXSIZE 100 #define KeyThpe int typedef struct { KeyType key; }RecordNode; RecordNode r[MAXSIZE]; 8.2.5 排序文件数据结构 说明:为了便于理解算法思路,假定数据元素中只包含一个数据项即关键字项,且为整型数据,即将排序表定义成int r[MAXSIZE],如果数据项包含多项,可参考8.6案例。 简单排序方法包括简单选择排序、直接插入排序及冒泡排序,其共同特点是排序思路非常直观,易于理解,算法的编程实现也比较容易。 8.3 简单排序方法 【基本思想】对待排序序列{r1,r2,…rn}进行n-1次选择操作,其中第i次操作是选择第i个最小数(或最大数),并把它放在第i个位置下。 【操作步骤】 ①从n个记录中找出关键字最小的记录; ②如果关键字最小的记录不是第1个记录,把关键字最小的记录与第一个记录交换; ③在余下的n-1个记录中,重复①、②,直到排序结束。 8.3.1简单选择排序 【例8.1】给定序列(38,45,89,39,45,56,23,30),写出其简单选择排序的每一趟排序结果。 排序过程如图8-1所示,图中每一行中两个加粗数据是需要交换的数据,当i=4及i=5只有一个加粗数据说明关键字最

文档评论(0)

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

文档有任何问题,请私信留言,会第一时间解决。

版权声明书
用户编号:7043023136000000

1亿VIP精品文档

相关文档