数据结构 第十章 内部排序.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文档。上传文档
查看更多
数据结构 第十章 内部排序.ppt

数 据 结 构 第十章 内部排序 10.1 概述 10.2 插入排序 10.3 快速排序 10.4 选择排序 10.5 归并排序 10.6 基数排序 10.7 各种内部排序方法的比较讨论 10.1 概述 排序(sorting)又称分类,是计算机程序设计中的一种重要操作,也是日常生活中经常遇到的问题,如图书馆中书籍的摆放和目录卡的建立就是按某种次序进行的。排序的目的就是把一批任意序列的数据记录,按关键字重新排成一个有序的序列,从而可以提高数据表的直观性,方便以后查询,并提高查找效率。 排序:排序就是把一批任意序列的数据记录,按关键字重新排成一个有序的序列,从而可以提高数据表的直观性,方便以后查询,并提高查找效率。 稳定排序和不稳定排序:在待排序的记录中若有两个或两个以上关键字值相同的记录,则排序的结果不唯一。在用某种方法排序之后,这些关键字相同的记录相对先后次序不变,即当Ki=Kj(1≤i≤n,1≤j≤n,i≠j)且ij,若在排序后的序列中Ri仍然领先于Rj,则称所用的排序方法是稳定的;反之,若有可能使排序后的序列中Ri落后于Rj ,则称所用的排序方法是不稳定的。 内部排序和外部排序:根据排序过程中所使用的存储设备的不同,排序可以分成两大类:一类是内部排序(internal sorting),指的是待排序记录存放在计算机随机存储器中进行的排序过程;另一类是外部排序(external sorting),指的是待排序记录的数量很大,抑制内存一次不能容纳全部记录,在排序过程中尚需对外存进行访问的排序过程。 顺序表的类型描述 #define max 1024 typedef int ElemType; typedef struct{ ElemType R[max]; int length; }SqList; 10.2 插入排序 插入排序(Insertion Sort)的基本思想是:每步将一个待排序的记录按其排序码关键字的大小插到前面已经排好的文件中的适当位置,直到全部插入完为止。 常用的有以下三种插入排序的方法: 直接插入排序 折半插入排序 希尔排序 一、直接插入排序 基本思想 假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n]。从i=2起直至i=n为止,依次将R[i]插入当前的有序区R[1..i-1]中,生成含n个记录的有序区。 如何将一个记录R[i]插入到当前的有序区,使得插入后仍保证该区间是按关键字有序的? 将R[i]插入到有序表R[1..i-1]中,进行如下操作: (1)暂存记录R[i],即R[0]=R[i] (2)用顺序查找的方法对有序表进行倒序扫描,并将关键字大于R[0]的记录后移,直到找到一个记录R[j],其关键字小于R[0]结束 (3)将记录R[0]存于R[j+1]中 2.应用实例 设有一组关键字序列为(49,38,65,97,76,13,27,49’),写出采用直接插入排序的每趟的排序结果。 练习:设待排序的排序码为(12,2,16,30,28,10,16’,20,6,18),写出采用直接插入排序法进行排序的每趟的排序结果。 3. 算法实现 4.算法分析 排序的基本操作为:比较两个关键字的大小和移动记录。若初始关键字按关键字递增有序(以下简称“正序”),则在每一趟排序中仅需进行一次关键字的比较,总的比较次数达到最小值n-1次。若初始关键字按关键字非递增有序(以下简称“逆序”),则在第i趟排序中关键字的比较次数为i次,总的比较次数达到最大值(n+2)(n-1)/2。因此插入排序算法的时间复杂度为O(n2)。 插入排序的空间复杂度为O(1)。 稳定性:稳定的 二、折半插入排序 1.基本思想 折半插入排序是在直接插入排序的基础上改进的一种算法。由于插入排序的基本操作是在一个有序序列中进行查找和插入,若这个“查找”操作利用“折半查找”来实现,那么由此进行的插入排序称之为“折半插入排序”。 折半查找时,将待插入记录的关键字和处于有序序列中间位置记录的关键字比较,若待插入的记录关键字小于有序序列中间位置记录的关键字,则high=mid-1;否则,low=mid+1。依此查找下去,直到lowhigh时,由折半查找得到的插入位置为low或high+1。 2.算法实现 3.算法分析 时间复杂度为:O(n2) 空间复杂度为:O(1) 稳定性:稳定的 三、希尔排序 1.基本思想 希尔排序(Shell Sort)又称为缩小增量排序,它的基本思想是:先将整个待排记录序列分割成若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。 2.实现过程 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成

文档评论(0)

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

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

1亿VIP精品文档

相关文档