第10章-内部排序.pptVIP

  1. 1、本文档共42页,可阅读全部内容。
  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章 内部排序 主要内容: 排序的基本概念 插入排序 交换排序 选择排序 归并排序 各种排序方法的比较 §10.1 概述 1. 基本概念 排序:将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列的过程叫排序。 设序列{R1, R2, …, Rn},相应关键字序列为{ K1, K2, …, Kn },所谓排序是指重新排列{ R1, R2, …, Rn }为{ Rp1, Rp2, …, Rpn },使得满足: {Kp1≤Kp2 …… ≤Kpn} 或 {Kp1≥Kp2 ……≥Kpn} 2. 排序的分类 待排序记录所在位置 内部排序:待排序记录存放在内存中 外部排序:排序过程中需对外存进行访问的排序 3. 排序的基本操作 排序的基本操作: 比较操作:比较两个关键字的大小 改变指向记录的指针(逻辑关系)或将一个记录从一个位置移动到另一个位置 4. 数据的存储形式 待排记录一般有三种存储形式 存放在一组地址连续的存储单元中,类似顺序表 实现排序必须借助移动记录 存放在静态链表中 实现排序只需修改指针 存放在一组地址连续的存储单元中,同时另设一个指示各个记录存储位置的地址向量 实现排序时修改地址向量中的地址,排序结束时统一调整记录的存储位置 顺序存储结构定义 5. 算法复杂度分析 评价排序算法的标准: 执行时间 所需辅助空间 稳定性 §10.2 插入排序 1. 插入排序的基本思想 基本思想:设R={R1,R2,……,Rn}为原始序列,R’={ }初始为空。插入排序就是依次取出R中的元素Ri,然后将Ri有序地插入到R’中。 例如: 2. 直接插入排序 排序过程:整个排序过程为n-1趟插入 将序列中第1个记录看成是一个有序子序列 从第2个记录开始,逐个进行插入,直至整个序列有序 算法程序 算法效率 时间复杂度 待排序记录按关键字从小到大排列(正序) 3. 折半插入排序 排序过程:用折半查找方法确定插入位置。 举例: 算法程序 4. 希尔排序 希尔排序(Shell’s Sort)又称“缩小增量排序”,基本思想为:把一个较长的待排序列分成若干段,n=n1+n2+……+nk;然后,分别对各段进行直接插入排序,使得整个序列基本有序;最后对整个序列进行一次直接插入排序。 希尔排序过程:先取一个正整数间隔d1n,把所有相隔d1的记录放一组,组内进行直接插入排序;然后取d2d1,重复上述分组和排序操作;直至di=1,即所有记录放进一个组中排序为止 举例 {49 38 65 97 76 13 27 49 55 04} 算法效率 希尔排序当d[k]=2(t-k+1)-1时(t为排序的总趟数, k为第k趟排序),可提高排序速度为O(n3/2),因为: 插入排序时T(n)=O(n2),而分组后n值减小,n2更小 关键字较小的记录跳跃式前移,在进行最后一趟增量为1的插入排序时,序列已基本有序 根据经验统计,希尔排序所需比较和移动次数约为n1.3,当n→∞时,可减少到n(log2n)2。 希尔排序不稳定 增量序列取法 无除1以外的公因子 希尔给出:d1=n/2,di+1=di/2 最后一个增量值必须为1 §10.3 交换排序 1. 交换排序的基本思想 基本思想:在待排序列中选两个记录,将它们的关键码相比较,如果反序(即排列顺序与排序后的次序正好相反),则交换它们的存储位置。 特点:通过交换,将关键字值较大的记录向序列的后部移动,关键字较小的记录向前移动。 典型算法 冒泡排序 快速排序 2. 冒泡排序 基本思想 在n个记录中,将相邻两个记录进行比较,若r[i].keyr[i+1].key (i=1,2,…,n),则交换(第一趟冒泡排序),结果关键字最大的记录被放在rn。 在n-1个记录中,若r[i].keyr[i+1].key (i=1,2,…,n-1),则交换,结果关键字次大的记录被安置在rn-1 以此类推,直到“在一趟排序过程中没有进行过交换记录的操作”为止 算法程序 性能分析 时间复杂度 最好情况(正序):比较1趟n-1次,不移动 2. 快速排序 基本思想:选择一个枢轴,通过一趟排序,将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后分别对这两部分记录进行排序,以达到整个序列有序。 一趟分割过程 先从high所指记录向前搜索,找到第1个小于key的记录与枢轴交换。然后从low起向后搜索,找到第一个比key大的记录与low互换。重复上面两步,直到low=high为止(该位置即为枢轴的位置) 快速排序整个过程 算法效率分析 时间复杂度 最好情况:每次总是选到中间值作枢轴,则形成二叉递归树:T(n)=O(nlog2n) 最坏情况:每次总是选到最小或最大元素作枢轴,则退化为冒泡排序:T(

文档评论(0)

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

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

1亿VIP精品文档

相关文档