浙江大学:《数据结构与算法》第十章 内部排序

第十章内部排序 10概述 口102插入排序 日1021直接插入排序 口10.3h础排序 103交换排序(快速排序) 口104选择排序 口1041简单选择排序 口1043堆排序 0105归并排序 106基数排序 10各种排序方法的比较讨论
第十章 内部排序 10.1 概述 10.2 插入排序 10.2.1 直接插入排序 10.2.3 shell排序 10.3 交换排序(快速排序) 10.4 选择排序 10.4.1 简单选择排序 10.4.3 堆排序 10.5 归并排序 10.6 基数排序 10.7 各种排序方法的比较讨论

101内部排序概述 口排序( Sorting) 将数据元素(或记录)的一个任意序列,重新排列成 个按关键字有序的序列。 口排序方法的稳定性: 对关键字相同的数据元素,排序前后它们的领先关 系保持不变,则称该排序方法是稳定的。反之, 该排序方法是不稳定的。 内部排序 待排序记录存放在计算机的内存中进行排序 口外部排序 待排序记录的数量很大,以致内存一次不能容纳全 部记录,在排序过程中尚需对外存进行访问的排序
10.1 内部排序概述 排序(Sorting): • 将数据元素(或记录)的一个任意序列,重新排列成 一个按关键字有序的序列。 排序方法的稳定性: • 对关键字相同的数据元素,排序前后它们的领先关 系保持不变,则称该排序方法是稳定的。反之,称 该排序方法是不稳定的。 内部排序 • 待排序记录存放在计算机的内存中进行排序。 外部排序 • 待排序记录的数量很大,以致内存一次不能容纳全 部记录,在排序过程中尚需对外存进行访问的排序

排序的分类 口按排序过程依据的不同原则进行分类: 插入排序 交换排序 选择排序 归并排序和 基数排序 按工作量分类,可以分为三类: (1)简单的排序方法,其时间复杂度为0(n2) (2)先进的排序方法,其时间复杂度为0(nlog2n) (3)基数排序,其时间复杂度为0(dn)
排序的分类 按排序过程依据的不同原则进行分类: • 插入排序、 • 交换排序、 • 选择排序、 • 归并排序和 • 基数排序 按工作量分类,可以分为三类: • (1)简单的排序方法,其时间复杂度为O(n2); • (2)先进的排序方法,其时间复杂度为O(nlog2n); • (3)基数排序,其时间复杂度为O(dn);

排序的基本操作和 记录的存储方式 口排序过程中需要的两种基本操作 (1)比较关键字的大小 (2)将记录从一个位置移至另一个位置 待排序记录序列可有下列三种存储方式 日(1)记录存放在一组连续的存储单元中;类似于线性表 的顺序存储结构,记录次序由存储位置决定,实现排序需 移动记录。 (2)记录存放在静态链表中;记录次序由指针指示,实 现排序不需移动记录,仅需修改指针。一链排序 (3)记录本身存放在一组连续的存储单元中,同时另设 指示各个记录存储位置的地址向量,排序过程中不移动记 录本身,而移动地址向量中相应记录的地址。排序结束后 再根据地址调整记录的存储位置。一地址排序
排序的基本操作和 记录的存储方式 排序过程中需要的两种基本操作: • (1)比较关键字的大小; • (2)将记录从一个位置移至另一个位置。 待排序记录序列可有下列三种存储方式: (1)记录存放在一组连续的存储单元中;类似于线性表 的顺序存储结构,记录次序由存储位置决定,实现排序需 移动记录。 (2)记录存放在静态链表中;记录次序由指针指示,实 现排序不需移动记录,仅需修改指针。---链排序 (3)记录本身存放在一组连续的存储单元中,同时另设 指示各个记录存储位置的地址向量,排序过程中不移动记 录本身,而移动地址向量中相应记录的地址。排序结束后 再根据地址调整记录的存储位置。---地址排序

待排序记录的数据类型 口# define maXsize20 o typedef int KeyType o typedef struct t o KeyType key InfoType otherinfo 口} RetYpe; o typedef struct 口 RedType r LMAXSIZE+1 int length D/SqList
待排序记录的数据类型 #define MAXSIZE 20 typedef int KeyType; typedef struct{ KeyType key; InfoType otherinfo; }RcdType; typedef struct{ RedType r[MAXSIZE+1]; int length; }SqList;

102插入排序 1021直接插入排序 例:序列为{49,38,65,97,76,13,27,49 (49),38,65,97,76,13,27,49} 0(38){(38,49),65,97,76,13,27,49} 日(65){(38,49,65),97,76,13,27,49 (97){(38,49,65,97),76,13,27,49} (76){(38,49,65,76,97),13,27,49} (13){(13,38,49,65,76,97),27,49} 口(27){(13,27,38,49,65,76,97),49 (49){(13,27,38,49,49,65,76,97)}
10.2 插入排序 10.2.1 直接插入排序 例:序列为{49,38,65,97,76,13,27,49} {(49),38,65,97,76,13,27,49} (38) {(38,49),65,97,76,13,27,49} (65) {(38,49,65),97,76,13,27,49} (97) {(38,49,65,97),76,13,27,49} (76) {(38,49,65,76,97),13,27,49} (13) {(13,38,49,65,76,97),27,49} (27) {(13,27,38,49,65,76,97),49} (49) {(13,27,38,49,49,65,76,97)}

直接插入排序算法 void InsertSort(sqlist &l) i for(i-2, K<=L length; ++i) if(T(L ri].key, L r[i-1. key)) Lr[0]=L.r[i]; ∥复制为哨兵 for(Fi-1; LT(L r[O).key, Lri]. key);--j L r[j+1-Lrll; ∥记录后移 Lr[+1]=L.r[o] ))// InsertSort 时间:最坏情形判断与移动各接近n(n+1)2 最好情形判断n次,无移动;故时间复杂度:O(n2) 间:一个辅助空间
直接插入排序算法 void InsertSort(SqList &L) { for(i=2; i<=L.length; ++i) if ( LT(L.r[i].key, L.r[i-1].key) ){ L.r[0] = L.r[i]; // 复制为哨兵 for(j=i-1; LT(L.r[0].key, L.r[j].key); --j) L.r[j+1] = L.r[j]; // 记录后移 L.r[j+1] = L.r[0]; }} // InsertSort 时间:最坏情形判断与移动各接近 n(n+1)/2; 最好情形判断n次,无移动;故时间复杂度:O(n2 ) 空间:一个辅助空间

1022She11排序算法 口基木思想: 口先将整个待排序记录序列分割成若干 子序列分别进行直接插入排序,待整个 序列“基本有序”时,再对全体记录进 次直接插入排序 口算法复杂度:0(n32
10.2.2 Shell排序算法 基本思想: 先将整个待排序记录序列分割成若干 子序列分别进行直接插入排序,待整个 序列“基本有序”时,再对全体记录进 行一次直接插入排序。 算法复杂度:O(n3/2)

She11排序举例(非稳定的) 例 {49,38,65,97,76,13,27,49,55,04} 增量取5:49 13 38 65 49 97 55 76 04 趟结果{13,27,49,55,04,49,38,65,97,76} 增量取3:13 55 38 76 27 04 65 49 49 97 二趟结果{13,04,49,38,27,49,55,65,97,76} 增量取1:13,04,49,38,27,49,55,65,97,76 三趟结果{04,13,27,38,49,49,55,65,76,97
Shell排序举例(非稳定的) 二趟结果{13,04,49,38,27,49,55,65,97,76} 增量取1:13,04,49,38,27,49,55,65,97,76 三趟结果{04,13,27,38,49,49,55,65,76,97} 一趟结果{13,27,49,55,04,49,38,65,97,76} 增量取3:13 55 38 76 27 04 65 49 49 97 例: {49,38,65,97,76,13,27,49,55,04} 增量取5: 49 13 38 27 65 49 97 55 76 04

103交换排序 1冒泡排序(其时间复杂度0(n2)) 例 49383838381313 38494949132727 65656513273838 977613274949 7613274949 13274965 274976 4997 初第第第第第第 始 关递趟超 排排 键序序序序 字后后后
10.3 交换排序 1. 冒泡排序(其时间复杂度O(n2)) 初 始 关 键 字 第 一 趟 排 序 后 第 二 趟 排 序 后 第 三 趟 排 序 后 第 四 趟 排 序 后 第 五 趟 排 序 后 第 六 趟 排 序 后 例: 49 38 38 38 38 13 13 38 49 49 49 13 27 27 65 65 65 13 27 38 38 97 76 13 27 49 49 76 13 27 49 49 13 27 49 65 27 49 76 49 97
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 浙江大学:《数据结构与算法》第七章 图.ppt
- 浙江大学:《数据结构与算法》第九章 查找.ppt
- 浙江大学:《数据结构与算法》第四章(4-1) 串类型的定义.ppt
- 浙江大学:《数据结构与算法》第七章(7-5) 有向无环图及其应用.ppt
- 浙江大学:《数据结构与算法》第六章(6-1) 树的定义和基本术语.ppt
- 浙江大学:《数据结构与算法》第五章(5-3) 矩阵的压缩存储.ppt
- 浙江大学:《数据结构与算法》第五章(5-1) 数组的定义.ppt
- 浙江大学:《数据结构与算法》第六章(6-3) 遍历二叉树和线索二叉树.ppt
- 浙江大学:《数据结构与算法》教学(讲课)周历.doc
- 浙江大学:《数据结构与算法》第三章(3-2) 栈的应用举例.ppt
- 浙江大学:《数据结构与算法》第三章(3-1) 栈.ppt
- 浙江大学:《数据结构与算法》第二章(2-1) 线性表的类型定义.ppt
- 浙江大学:《数据结构与算法》第二章(2-3) 线性表的链式表示与实现.ppt
- 浙江大学:《数据结构与算法》课程简介.doc
- 浙江大学:《数据结构与算法》第一章 绪论.ppt
- 浙江大学:《数据结构与算法》实验要求与指导.doc
- 浙江大学:《数据结构与算法》任课教师登记表.doc
- 浙江大学:《数据结构与算法》教学(实验)周历.doc
- 浙江大学:《数据结构与算法》教学大纲.doc
- 《Auto CAD 2002中文版应用教程》第9章 文字标注.pps
- 浙江大学:《数据结构与算法》第六章(6-4) 树和森林.ppt
- 《Struts在行动 使用领先的Java框架构建Web应用》讲义.pdf
- 《网络系统集成技术》第10章 基于Web的应用系统开发技术.ppt
- 《网络系统集成技术》第11章 网络系统集成的规划与设计.ppt
- 《网络系统集成技术》第12章 大学校园网系统集成实例.ppt
- 《网络系统集成技术》第1章 网络系统集成概述.ppt
- 《网络系统集成技术》第2章 网络基础知识.ppt
- 《网络系统集成技术》第3章 常用的网络技术.ppt
- 《网络系统集成技术》第4章 网络服务器技术.ppt
- 《网络系统集成技术》第5章 网络存储备份技术.ppt
- 《网络系统集成技术》第6章 综合布线技术.ppt
- 《网络系统集成技术》第7章 网络互联技术.ppt
- 《网络系统集成技术》第8章 网络管理技术.ppt
- 《网络系统集成技术》第9章 网络安全技术.ppt
- 浙江大学:《电子商务安全》课程PPT教学课件_第九章 安全通信协议与交易协议.ppt
- 浙江大学:《电子商务安全》课程PPT教学课件_复习课.ppt
- 浙江大学:《电子商务安全》课程PPT教学课件_第一章 电子商务安全的现状和趋势.ppt
- 浙江大学:《电子商务安全》课程PPT教学课件_第三章 数字签名技术与应用.ppt
- 浙江大学:《电子商务安全》课程PPT教学课件_第五章 密钥管理与数字证书.ppt
- 浙江大学:《电子商务安全》课程PPT教学课件_第六章 TCP/IP服务与WWW安全.ppt