插入排序和交换排序.ppt

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
? 快速排序 § 9.3 交换排序 (1) 基本思想 通过一趟排序将待排序列以 枢轴 为标准划分成 两部分 ,使其中一部分记录的关键字均比另一部分 小,再分别对这两部分进行快速排序,以达到整个 序列有序。 通常取第一个记录的值为基准值或枢轴。 第 9 章 内部排序 选择排序 ( 直接排序、堆排序 ) 概述 插入排序 ( 直接排序、折半排序、希尔排序 ) 交换排序 ( 冒泡排序、快速排序 ) 通过例子消化概念 ? 在排序问题中,通常将 数据元素 称为 记录 。 ? 显然输入的是一个记录集合,排序后输出的也是一个 记录集合。 ? 所以可以将排序看成是线性表的一种操作。 ? 排序的依据是关键字之间的大小关系,那么对同一记录集 合,针对不同的关键字进行排序,可以得到不同序列。 ? 请看例子:排序演示 .xls § 9.1 概述 排序:将数据元素的一个任意序列,重新排列成一个 按关键 字有序 的序列。 例:将关键字序列: 52, 49, 80, 36, 14, 58, 61, 23 调整为: 14, 23, 36, 49, 52, 58, 61, 80 若按 主 关键字排序则 结果惟一 若按 次 关键字排序则 结果 可以 不惟一 ( 因有相同关键字 ) 排序的稳定性 ? 假设 ki=kj(1=i=n,1=j=n,i!=j) ,且在排序前 的序列中 ri 领先于 rj( 即 ij) 。 ? 如果排序后 ri 仍领先于 rj ,则称所用的排序方法是 稳 定的; ? 反之,若可能使得排序后的序列中 rj 领先 ri ,则称所 用的排序方法是 不稳定的 。 通过例子消化概念 编号 姓名 总分 1 小贾 731 2 小刘 659 3 小张 725 4 小王 731 5 小胡 726 编号 姓名 总分 1 小贾 731 4 小王 731 5 小胡 726 3 小张 725 2 小刘 659 编号 姓名 总分 4 小王 731 1 小贾 731 5 小胡 726 3 小张 725 2 小刘 659 § 9.1 概述 内部排序和外部排序 若整个排序过程不需要访问外存便能完成, 则称此类排序问题为 内部排序 ; 反之,若参加排序的记录数量很大,整个序 列的排序过程不可能在内存中完成,则称此类排 序问题为 外部排序 。 插入排序 ? 基本思想:在有序序列中插入新的记录以达到扩 大有序区的长度的目的。 在对记录序列 R[1..n] 的排序过程中,区段 R[1..i-1] 中的记录已按关键字非递减的顺序排列, 将 R[i] 插入到有序序列 R[1..i-1] 中,使区段 R[1..i] 中的记录按关键字非递减顺序排列 ? 插入排序 § 9.2 插入排序 直接插入排序 初始状态 49 38 65 97 76 13 27 49 R 0 R 1 R 2 R 3 R 4 R 5 R 6 R 7 R 8 i =2 i =3 38 49 65 97 76 13 27 49 i =4 38 49 65 97 76 13 27 49 i =5 38 49 65 76 97 13 27 49 76 i =6 38 49 65 76 97 13 27 49 13 i =7 38 49 65 76 97 13 27 49 27 i =8 38 49 65 76 97 13 27 49 49 49 38 65 97 76 13 27 49 38 49 38 7 趟 排序 1 趟 排序 2 趟 排序 排序过程: 先将序列中第 1 个记录看成是一个有序子序列, 然后从第 2 个记录开始,逐个进行插入,直至整个序列有序 。 ? 直接插入排序 § 9.2 插入排序 void InsertSort ( SqList L ) { // 对顺序表 L 作直接插入排序。 for ( i = 2; i = L.length; ++ i ) // 将 L.r[i] 插入有序子表 if (L.r[ i ].key L.r[ i -1].key) { } } // InsertSort 在 r [1.. i -1] 中查找 r [ i ] 的插入位置 ; 对于在查找过程中找到的那些关键字 不小于 r [ i ].key 的记录,在查找的同 时实现记录向后移动; 插入 r [ i ] ; L.r[0] = L.r[ i ]; // 复制为监视哨 L.r[ i ] = L.r[ i -1]; for ( j = i - 2; L.r[0].key L.r[ j

文档评论(0)

zhaoxiaoj + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档