数据结构郝春梅C语言版第9篇.pptVIP

  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文档。上传文档
查看更多
第9章 排 序 学习目标与要求: 了解排序的定义。 熟练掌握各种排序方法的基本思想。 掌握各种排序方法时间复杂度的分析方法,并能分析各种排序方法在何种情况下使用。 掌握各种排序方法的稳定性。 9.1 基 本 概 念 排序(sorting)是计算机程序设计中的一种重要操作,它的功能是将一组任意序列的数据元素,重新排列成一个按关键字递增或递减的有序序列。 下面给排序下一个确切的定义: 假设有n个记录的序列为{R1, R2, …, Rn},其相应的关键字序列为{K1, K2, …, Kn},排序是一种操作,它确定一种排列{Rj1, Rj2, …, Rjn},使得它们的关键字满足如下递增(或递减)的关系:Kj1≤Kj2≤…≤Kjn,把这样的运算称为排序。 9.1 基 本 概 念 内部排序的方法很多,但不论哪种排序过程,通常都要进行两种基本操作: (1) 比较两个记录关键字的大小。 (2) 根据比较结果,将记录从一个位置移到另一个位置。 本章讨论排序算法均使用顺序结构存储,且按关键字递增顺序排序。涉及记录的数据结构如下: #define MAXSIZE 100 #define KEYTYPE int typedef struct { KEYTYPE key; }RECORDNODE; 9.2 插 入 排 序 9.2.1 直接插入排序 直接插入排序是一种最简单的排序方法。 它的基本思想是:首先将第一个记录看成是已排好序的子序列,从第二个记录开始至第n个记录,每次将待排序记录插入到前面已排好序的序列的适当位置,直到全部记录排好序为止。 9.2.1 直接插入排序 排序过程如图9.1所示。 9.2.2 希尔排序 希尔排序(Shell Sort)又称缩小增量排序,它是对直接插入排序的一种改进方法。 希尔排序的基本思想是首先将待排序记录分割成若干个子序列,分别对每个子序列进行直接插入排序,待整个序列中的记录基本有序时,再对全体序列进行一次直接插入排序。 9.2.2 希尔排序 按照希尔排序,其排序过程如图9.2所示。 9.3 交 换 排 序 9.3.1 冒泡排序 冒泡排序是一种简单的排序方法,其基本思想是: 首先将第一个记录和第二个记录做比较,若逆序即r[1].keyr[2].key,则将两个记录交换,然后再比较第二个记录和第三个记录,以此类推,直到第n-1个记录和第n个记录比较结束,这样完成一趟冒泡排序,第一趟排序结束后,最大的记录被交换到第n个位置;之后再对前面n-1个记录依前面的过程进行第二趟冒泡排序,将关键字次大的记录交换到第n-1个位置。 9.3.1 冒泡排序 按照冒泡排序方法,其排序过程如图9.3所示。 9.3.1 冒泡排序 算法分析: (1) 最好情况下,原数据按递增排列有序,改进后的冒泡排序算法共需比较数据n-1次,移动数据0次。 (2) 最坏情况下,原数据逆序排列,则需要进行n-1趟排序,每趟排序要进行n-i次关键字的比较,且每次比较都必须移动记录三次来交换记录的位置。此时,比较和移动次数均达到最大值: 9.3.2 快速排序 快速排序的基本思想是: 通过一趟快速排序用一个记录将待排序记录分成前后两部分,前一部分的关键字均比后一部分的关键字小,则支点的位置就确定了,然后再对前后两部分的记录进行快速排序,直到每个部分为空或只包含一个记录,整个快速排序结束。 9.3.2 快速排序 一趟快速排序的过程如下: (1) 设置两个整数变量i, j,初始i, j分别指向待排序记录的第一个元素和最后一个元素,将r[i]复制到r[0]中。 (2) 从j所指记录开始,比较r[j].key和r[0].key,若r[j].keyr[0].key,则j--,重复这个过程,直到找到一个小于r[0].key的记录为止,将该记录复制到位置i处。 (3) 修改?i=i+1,从i所指记录开始,依次向后比较r[i].key和r[0].key,若r[i].key r[0].key,则i++,重复这个过程,直到找到一个大于r[0].key的记录,将该记录复制到位置j处。 (4) 修改j=j-1,重复(2)和(3)过程,直到i=j结束。 (5) 将r[0]复制到位置i(j)处。 9.3.2 快速排序 按照快速排序方法,排序过程如图9.4所示。 9.4 选 择 排 序 9.4.1 直接选择排序 直接选择排序也是一种简单的排序方法。 它的基本思想是:第一趟,从待排序记录中选出最小关键字的记录与第一个记录交换,第二趟再从剩余的数据中选出具有最小关键字的记录与第二个记录交换,以此类推,共进行n-1趟排序,将所有记录排好序。 9.4.1 直接选择排序 按照直接选择排序方法,排序过程如图9.5所示。 9.4.2 堆排序 我们将待排序数据构成

文档评论(0)

189****6140 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档