已阅读5页,还剩51页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
排序问题 排序问题 插入排序 小结和作业 归并排序 排序的定义 内部排序和外部排序 内部排序方法的分类 排序问题 稳定性 排序的定义 排序是计算机内经常进行的一种操作 其目的是将一组 无序 的记录序列调整为 按关键字有序 的记录序列 52 49 80 36 14 58 61 23 97 75 14 23 36 49 52 58 61 75 80 97 排序的定义 一般情况下 假设含n个记录的序列为 R1 R2 Rn 其相应的关键字序列为 K1 K2 Kn 这些关键字相互之间可以进行比较 即在它们之间存在着这样一个关系 Kp1 Kp2 Kpn 按此固有关系将上式记录序列重新排列为 Rp1 Rp2 Rpn 的操作称作排序 排序的定义 关键字 key 数据对象有多个属性域 即多个数据成员组成 其中有一个属性域可用来区分对象 作为排序依据 称为关键字 也称为排序码 排序方法的稳定性 如果在对象序列中有两个对象r i 和r j 它们的排序码k i k j 且在排序之前 对象r i 排在r j 前面 如果在排序之后 对象r i 仍在对象r j 的前面 则称这个排序方法是稳定的 否则称这个排序方法是不稳定的 内部排序和外部排序 由于待排序的记录数量不同 使得排序过程中涉及的存储器不同 可将排序方法分为 1 内部排序 整个排序过程不需要访问外存便能完成 2 外部排序 参加排序的记录数量很大 整个序列的排序过程不可能在内存中完成 内部排序方法的分类 内部排序的过程是一个逐步扩大记录的有序序列长度的过程 有序序列区 无序序列区 有序序列区 无序序列区 内部排序方法的分类 基于不同的 扩大 有序序列长度的方法 内部排序方法大致可分下列几种类型 1 插入排序 2 交换排序 3 选择排序 4 归并排序 5 基数排序 内部排序方法 6 计数排序 内部排序方法的分类 defineMAXSIZE1000 待排顺序表最大长度 typedefintKeyType 关键字类型为整数类型 待排记录的数据类型定义如下 typedefstruct KeyTypekey 关键字项InfoTypeotherinfo 其它数据项 RcdType 记录类型 内部排序方法的分类 typedefstruct RcdTyper MAXSIZE 1 r 0 闲置intlength 顺序表长度 SqList 顺序表类型 插入排序 将无序子序列中的一个或几个记录 插入 到有序序列中 从而增加记录的有序子序列的长度 各种排序方法的定义 交换排序 通过 交换 无序序列中的记录从而得到其中关键字最小或最大的记录 并将它加入到有序子序列中 以此方法增加记录的有序子序列的长度 选择排序 从记录的无序子序列中 选择 关键字最小或最大的记录 并将它加入到有序子序列中 以此方法增加记录的有序子序列的长度 各种排序方法的定义 归并排序 通过 归并 两个或两个以上的记录有序子序列 逐步增加记录有序序列的长度 基数排序 是一种借助多关键字排序的思想对单逻辑关键字进行排序的方法 各种排序方法的定义 插入排序 一趟插入排序的基本思想 有序序列R 1 i 1 R i 无序序列R i n 有序序列R 1 i 无序序列R i 1 n 插入排序 一趟插入排序的实现步骤 3 将R i 插入 复制 到R j 1 的位置上 2 将R j 1 i 1 中的所有记录均后移一个位置 1 在R 1 i 1 中查找R i 的插入位置 R 1 j key R i key R j 1 i 1 key 插入排序分类 1 直接插入排序 基于顺序查找 2 折半插入排序 基于折半查找 3 希尔排序 基于逐趟缩小增量 直接插入排序 基本操作 将一个记录插入到已经排好序的有序表中 利用 顺序查找 实现 在R 1 i 1 中查找R i 的插入位置 直接插入排序 算法实现要点 从R i 1 起向前进行顺序查找 监视哨设置在R 0 R 0 j R i j i 1 插入位置 直接插入排序 38 65 97 76 13 27 49 38 65 97 76 13 27 49 49 38 i 1 i 2 49 49 38 49 65 97 76 13 27 38 65 i 3 49 38 65 直接插入排序 49 65 97 76 13 27 38 49 65 97 76 13 27 38 97 i 4 49 38 65 97 49 65 97 76 13 27 38 76 i 5 76 97 直接插入排序 49 65 76 97 13 27 38 49 65 76 97 13 27 38 13 i 6 49 38 65 76 97 13 38 49 65 76 97 27 13 27 i 7 49 38 65 76 97 27 直接插入排序 算法实现要点 R 0 R i 设置 哨兵 循环结束表明R i 的插入位置为j 1 for j i 1 R 0 key R j key j 从后往前找 直接插入排序 技巧 对于在查找过程中找到的那些关键字不小于R i key的记录 并在查找的同时实现记录向后移动 for j i 1 R 0 key R j key j R j 1 R j 上述循环结束后可以直接进行 插入 直接插入排序 voidInsertionSort SqList i 把第2 n的对象插入if L r i key L r i 1 key 技巧 InsertSort L r 0 L r i 复制为监视哨for j i 1 L r 0 key L r j key j L r j 1 L r j 记录后移L r j 1 L r 0 插入到正确位置 直接插入排序性能分析 实现内部排序的基本操作有两个 2 移动 记录 1 比较 序列中两个关键字的大小 直接插入排序性能分析 0 关键字在记录序列中顺序有序 关键字在记录序列中逆序有序 O n2 时间复杂度 稳定性 是一种稳定的排序方法 直接插入排序 练习 1 直接插入排序在最好情况下的时间复杂度为 A O logn B O n C O nlogn D O n2 2 用直接插入排序法对下面四个序列进行排序 由小到大 元素比较次数最少的是 A 94 32 40 90 80 46 21 69 B 32 40 21 46 69 94 90 80 C 21 32 46 40 80 69 90 94 D 90 69 80 46 21 32 94 40 折半插入排序 如果R 1 i 1 是一个按关键字有序的有序序列 则可以利用折半查找实现 在R 1 i 1 中查找R i 的插入位置 如此实现的插入排序为折半插入排序 折半插入排序 012345678910 14 36 49 52 80 L r 58 61 23 97 75 58 待排序元素的插入位置 折半插入排序 voidBiInsertionSort SqList L BInsertSort 在L r 1 i 1 中折半查找插入位置 for i 2 i L length i for L r 0 L r i 将L r i 暂存到L r 0 for j i 1 j high 1 j L r j 1 L r j 记录后移 L r high 1 L r 0 插入 折半插入排序 low 1 high i 1 while low high m low high 2 折半 if L r 0 key L r m key high m 1 插入点在低半区elselow m 1 插入点在高半区 折半插入排序性能分析 1 折半插入排序所需附加存储空间和直接插入排序相同 从时间上来看 折半插入排序减少了关键字的比较次数 但是移动次数不变 2 折半插入排序的时间复杂度为o n2 3 折半插入排序是一个稳定的排序方法 希尔排序 Shell在1959年提出 又称为缩小增量排序 基本思想 对待排记录序列先作 宏观 调整 再作 微观 调整 所谓 宏观 调整 指的是 跳跃式 的插入排序 希尔排序 将记录序列分成若干子序列 分别对每个子序列进行插入排序 例如 将n个记录分成d个子序列 R 1 R 1 d R 1 2d R 1 kd R 2 R 2 d R 2 2d R 2 kd R d R 2d R 3d R kd R k 1 d 其中 d称为增量 它的值在排序过程中从大到小逐渐缩小 直至最后一趟排序减为1 希尔排序 dk 5 12345678910 65 97 76 13 27 49 55 04 49 38 第一趟 12345678910 49 55 04 49 38 65 97 76 13 27 希尔排序 dk 3 第二趟 12345678910 49 55 04 49 38 65 97 76 13 27 12345678910 49 38 27 49 55 65 97 76 13 04 希尔排序 dk 1 第三趟 12345678910 49 38 27 49 55 65 97 76 13 04 12345678910 27 38 49 49 55 65 97 76 04 13 希尔排序 算法描述举例 intd 5 3 1 12345678910 38 65 97 76 13 27 49 55 04 49 38 65 97 76 13 27 49 55 04 49 第一趟 L r 0 key 13 27 49 55 04 dk d 0 5 希尔排序 算法描述举例 intd 5 3 1 12345678910 27 49 55 04 49 38 65 97 76 13 27 04 38 55 第二趟 L r 0 key dk d 1 3 04 38 j 希尔排序 算法描述举例 intd 5 3 1 12345678910 04 49 38 27 49 55 65 97 76 13 38 04 13 49 第三趟 L r 0 key dk d 2 1 04 38 27 49 38 27 97 76 76 希尔排序 voidShellSort SqList 一趟增量为dlta k 的插入排序 ShellSort 希尔排序 voidShellInsert SqList 插入 if ShellInsert 希尔排序 算法分析 增量序列可以有各种取法 但序列中最后1个值必须是1 序列中的值没有除1以外的公因子 不是稳定的算法 复杂度大概是nlongn 希尔排序 用希尔排序对数组 98 36 9 0 47 23 1 8 10 7 进行排序 给出的步长依次是4 2 1 则排序需趟 写出第一趟结束后 数组中数据的排列次序 归并排序 归并排序的过程基于下列基本思想进行 将两个或两个以上的有序子序列 归并 为一个有序序列 归并排序 在内部排序中 通常采用的是2 路归并排序 即 将两个位置相邻的记录有序子序列 有序子序列R l m 有序子序列R m 1 n 归并为一个记录的有序序列 有序序列T l n 这个操作对顺序表而言 是轻而易举的 归并排序 练习 38 65 97 76 13 27 49 i j m n 归并两个有序序列算法 voidMerge RcdTypeSR RcdType TR inti intm intn 将有序的记录序列SR i m 和SR m 1 n 归并为有序的记录序列TR i n Merge for j m 1 k i i m 归并两个有序序列算法 if i m TR k n SR i m 将剩余的SR i m 复制到TR if j n TR k n SR j n 将剩余的SR j n 复制到TR 归并排序算法 如果记录无序序列R s t 的两部分R s s t 2 和R s t 2 1 t 分别按关键字有序 则利用上述归并算法很容易将它们归并成整个记录序列是一个有序序列 由此 应该先分别对这两部分进行2 路归并排序 归并排序算法演示 52 23 80 36 68 14 s 1 t 6 52 23 80 36 68 14 52 23 80 52 23 52 23 52 80 36 68 14 36 68 36 68 14 36 68 14 23
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026秋季国家管网集团液化天然气接收站管理公司高校毕业生招聘考试参考题库(浓缩500题)附答案详解(夺分金卷)
- 2026国网吉林省电力公司高校毕业生提前批招聘(约450人)笔试备考题库浓缩500题附答案详解(b卷)
- 2026秋季国家管网集团东部原油储运公司高校毕业生招聘考试备考试题(浓缩500题)及答案详解【名校卷】
- 2025国网云南省电力校园招聘(提前批)笔试模拟试题浓缩500题含答案详解
- 2026国网山东省电力公司高校毕业生提前批招聘(约450人)笔试备考题库浓缩500题含答案详解(突破训练)
- 国家管网集团2026届高校毕业生招聘笔试参考题库(浓缩500题)及答案详解【典优】
- 2026年开封市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(模拟题)
- 2026国网辽宁省电力校园招聘(提前批)笔试模拟试题浓缩500题及答案详解(各地真题)
- 2026国网内蒙古高校毕业生提前批招聘(约450人)笔试模拟试题浓缩500题带答案详解(完整版)
- 2026国家管网集团北方管道公司秋季高校毕业生招聘考试备考试题(浓缩500题)带答案详解(考试直接用)
- 老舍《茶馆》三幕话剧剧本
- 高考数学函数专题知识训练50题(含参考答案)-5份
- T-ZSA 288-2024 餐饮设备智能烹饪机器人系统通.用技术要求
- 产教融合视域下高职人才培养质量多元协同评价体系的探索与实践
- 8 美丽文字 民族瑰宝-意蕴隽永的汉字(说课稿)2023-2024学年统编版道德与法治五年级上册
- 中职学校全域德育体系的构建与协同
- 药物过敏反应应急处理
- 应急演练指南
- 房东 贝壳租房合同
- 华为人力资源管理手册
- 植物医生诊病指南知到智慧树章节测试课后答案2024年秋甘肃农业大学
评论
0/150
提交评论