教案第7章 排序.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文档。上传文档
查看更多
第7章排序

第七章 排 序 算法演示 上一页 下一页 返 回 VC++ 讲授:李学刚 常州信息职业技术学院 数 据 结 构 周岳山 陈丽敏 编著 2 第7章 排序 排序是程序设计中的常用算法,它可以提高查找效率、提高计算机的工作效率。因此,排序在各领域有着广泛的应用。 7.1 排序的基本概念 1、排序:将数据元素(或记录)的任意序列,通过某些方法重新排列成一个按关键字有序(递增或递减)的序列的过程称为排序。 2、排序过程中的两种基本操作 ①比较两个关键字值的大小; ②根据比较结果,移动记录的位置。 3、排序的稳定性:对于关键字值相同的数据元素经过某种方法排序后,若数据元素的位置关系,排序前与排序后保持一致,称此排序方法是稳定的;反之,则称为不稳定的。 例如: 对关键字值为:5,3,8,3,6,6的记录排序。 若排序后的序列为:3,3,5,6,6,8,其相同关键字值的元素位置依然是3在3前,6在6前,与排序前保持一致,则表示这种排序法是稳定的; 若排序后的序列为:3,3,5,6,6,8,则表示这种排序法是不稳定的。 3 4、内排序和外排序 内排序:整个排序过程都在内存进行的排序称为内排序。 外排序:待排序的数据元素量大,以致内存一次不能容纳全部记录,在排序过程中需要对外存进行访问的排序称为外排序。 5、顺序表类型描述 7.2 插入排序 1、直接插入排序 基本思想:将一个记录插到已按关键字的值排好序的记录序列中,使其仍然有序。 算法思路:设有一组关键字{k1,k2, …,kn},排序开始就认为k1是一个有序序列;让k2插入上述表长为1的有序序列,使之成为一个表长为2的有序序列;然后让k3插入上述表长为2的有序序列,使之成为一个表长为3的有序序列;依次类推,最后让kn插入上述表长为n-1的有序序列,得到一个表长为n的有序序列。 顺序表的类型描述 #define n 100 //待排序记录的个数 typedef int KeyType; //关键字类型定义 typedef char OtherdataType;//非关键字字段类型定义 typedef struct { KeyType key; //关键字域 OtherdataType data; //其它数据域 } RecType; typedef RecType SeqList[n+1]; //顺序表类型 3 4 直接插入排序的排序过程 设有n个数据已存放到数组R[1…n]中。 ①若R[i].keyR[i-1].key 则R[i]=R[0],i-1=j; ②若R[0].keyR[j].key 则R[j]后移R[j]=R[j+1],j--; ③重复执行②直到R[0].key≥R[j].key,即将R[i]要插入的位置R[j+1]空出; ④R[0]=R[j+1],即将R[i]插入到正确的位置; ⑤重复执行以上各步。 说明:以上排序过程共进行n-1趟。 直接插入排序的排序算法 说明:①监视哨R[0]的作用是:在进入确定插入位置的循环之前,保存了插入值R[i]的副本,避免因记录的移动而丢失R[i]中的内容;使内循环总能够结束,以免循环过程中数组下标越界。 ②时间复杂度为O(n2),辅助空间为O(1); ③直接插入排序是稳定的排序方法; ④该方法最适合待排序关键字基本有序的序列。 直接插入排序的排序过程: 假定有原始序列:38,65,49,97,76,13,27,存放在一个长度为8的数组R中。 i R[0] R[1] R[2] R[3] R[4] R[5] R[6] R[7] 38 65 49 97 76 13 27 第一趟 2 38 65 第二趟 3 49 38 49 65 第三趟 4 49 38 49 65 97 第四趟 5 76 38 49 65 76 97 第五趟 6 13 13 38 49 65 76 97 第六趟 7 27 13 27 38 49 65 76 97 直接插入排序的排序算法: void InsertSort(SeqList R) { int i,j; for(i=2;i=n;i++) //依次插入R[2],R[3],…,R[n] {if (R[i].keyR[i-1

文档评论(0)

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

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

1亿VIP精品文档

相关文档