




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
9.1 排序的基本概念 9.2 插入排序 9.3 选择排序 9.4 交换排序 9.5 归并排序 9.6 基数排序 9.7 性能比较 第第9 9章章 排序排序 1 9.1排序的基本概念 1.排序: 将一组杂乱无章的数据按一定的规律顺次排列 起来的过程。 存放在数据表中 按关键字排序 2. 排序的目的:便于查找。 3.排序算法好坏的衡量标准: (1)时间复杂度 它主要是分析记录关键字的比较次数和记 录的移动次数。 (2)空间复杂度算法中使用的内存辅助空间的多少。 (3)稳定性若两个记录A和B的关键字值相等,但排序后A、B 的先后次序保持不变,则称这种排序算法是稳定的。 4、排序的种类:分为内部排序和外部排序两大类。 若待排序记录都在内存中,称为内部排序;若待排序 记录一部分在内存,一部分在外存,则称为外部排序 。注:外部排序时,要将数据分批调入内存来排序,中间结果还要及时放入外 存,显然外部排序要复杂得多。 2 5.待排序记录在内存中怎样存储和处理? 顺序排序排序时直接移动记录; 链表排序排序时只移动指针; 地址排序排序时先移动地址,最后再移动记录 。 注:地址排序中可以增设一维数组来专门存放记录的地址 。 6. 内部排序的算法有哪些? 按排序的规则不同,可分为5类: 插入排序、交换排序、选择排序、归并排序、基数排序 按排序算法的时间复杂度不同,可分为3类: v简单的排序算法:时间效率低,O(n2) v先进的排序算法: 时间效率高,O( nlog2n ) v基 数 排 序 算法:时间效率高,O( dn) d关键字的位数(长度) 3 9.2 插入排序 插入排序的基本思想是:每步将一个待排序的对象,按 其关键码大小,插入到前面已经排好序的一组对象的适当位 置上,直到对象全部插入为止。 简言之,边插入边排序,保证子序列中随时都是排好序的。 常用的插入排序有:直接插入排序和希尔排序两种。 一、直接插入排序 1、其基本思想是: 顺序地把待排序的数据元素按其关键字值的大小插入到已排 序数据元素子集合的适当位置。 最简单的排序法!最简单的排序法! 4 初始关键字序列:【13】, 6, 3, 31, 9, 27, 5, 11 第一次排序: 【6, 13】, 3, 31, 9, 27, 5, 11 第二次排序: 【3, 6, 13】, 31, 9, 27, 5, 11 第三次排序: 【3, 6, 13,31】, 9, 27, 5, 11 第四次排序: 【3, 6, 9, 13,31】, 27, 5, 11 第五次排序: 【3, 6, 9, 13,27, 31】, 5, 11 第六次排序: 【3, 5, 6, 9, 13,27, 31】, 11 第七次排序: 【3, 5, 6, 9, 11,13,27, 31】 例1:关键字序列T=(13,6,3,31,9,27,5,11), 请写出直接插入排序的中间过程序列。 注:方括号 中为已排序记录的关键字,下划横线的 关键字 表示它对应的记录后移一个位置。 5 2、C语言程序 void InsertSort(DataType a, int n) /*用直接插入法对a0-an-1排序*/ int i, j; DataType temp; for(i = 0; i -1 typedef struct KeyType key; DataType; #define MaxSize 100 #include “SeqList.h“ 7 (1)时间效率: 因为在最坏情况下,所有元素的比较次数总 和为(01n-1)O(n2)。其他情况下也要 考虑移动元素的次数。 故时间复杂度为O(n2) (2)空间效率:仅占用1个缓冲单元O O(1 1) (3)算法的稳定性:稳定 3、直接插入排序算法分析 二、希尔(二、希尔(shellshell)排序排序 (又称缩小增量排序) 1、基本思想:把整个待排序的数据元素分成若干个小组,对同 一小组内的数据元素用直接插入法排序;小组的个数逐次缩小, 当完成了所有数据元素都在一个组内的排序后排序过程结束。 2、技巧:小组的构成不是简单地“逐段分割”,而是将相隔某 个增量dk的记录组成一个小组,让增量dk逐趟缩短(例如依次取 5,3,1),直到dk1为止。 3、优点:让关键字值小的元素能很快前移,且序列若基本有序 时,再用直接插入排序处理,时间效率会高很多。 8 例2:设待排序的序列中有12个记录,它们的关键字序列 T=(65 ,34,25,87,12,38,56,46,14,77,92,23),请写 出希尔排序的具体实现过程。 算法分析:开始时d 的值较大,子序列中的对象较少,排序速度 较快;随着排序进展,d 值逐渐变小,子序列中对象个数 逐渐变多,由于前面工作的基础,大多数记录已基本有序 ,所以排序速度仍然很快。 通常,di+1=di/2 (结果取整) 时间效率:O(n(log2n)2) 空间效率:O(1)因为仅占用1个缓冲单元 算法的稳定性:不稳定 下面给出希尔排序的具体实现过程: 9 第1趟 (d=6) 第2趟 (d=3) 第3趟 (d=1) 10 4、C语言程序 void ShellSort(DataType a, int n, int d, int numOfD) int i, j, k, m, span; DataType temp; for(m = 0; m -1 temp = aj; aj = aj+1; aj+1 = temp; 29 4、冒泡排序的算法分析 最好情况:初始排列已经有序,只执行一趟起泡,做 n-1 次关键码比较,不移动对象。 最坏情形:初始排列逆序,算法要执行n-1趟起泡,第i趟 (1 i n) 做了n- i 次关键码比较,执行了n-i 次对象交换 。此时的比较总次数KCN和记录移动次数RMN为: 因此: 时间效率:O(n2) 因为要考虑最坏情况 空间效率:O(1) 只在交换时用到一个缓冲单元 稳 定 性: 稳定 25和25*在排序前后的次序未改变 30 二、快速排序 1、基本思想:从待排序列中任取一个元素 (例如取第一个) 作 为中心,所有比它小的元素一律前放,所有比它大的元素一律 后放,形成左右两个子表;然后再对各子表重新选择中心元素 并依此规则调整,直到每个子表的元素只剩一个。此时便为有 序序列了。 2、优点:因为每趟可以确定不止一个元素的位置,而且呈指数 增加,所以特别快。 例7、关键字序列 T=(60,55,48,37,10,90,84,36),请 按从小到大的顺序,写出快速排序的具体实现过程。 31 第一次快速排序过程 32 3、C语言实现 void QuickSort(DataType a, int low, int high) int i = low, j = high; DataType temp = alow; while(i j) while(i j if(i j) ai = aj; i+; while(i j if(i j) aj = ai; j-; ai = temp; if(low i) QuickSort(a, low
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 惠州市实验中学2026届高三化学第一学期期中质量跟踪监视试题含解析
- 情景交融疗法课件
- 江苏省东台市2026届化学高二第一学期期中考试试题含解析
- 幼儿园大班语言领域活动设计方案
- 小型超市活动策划方案
- 销售新人培训计划方案内容
- 五班级语文教学工作方案
- 灯具促销活动策划方案
- 布展工程施工设计方案
- 乐理模拟试题及答案
- 对新员工保密基本培训
- 2025届湖北省部分学校新高三新起点暑期效果联合质量检测数学试卷(解析版)
- GB/T 6553-2024严酷环境条件下使用的电气绝缘材料评定耐电痕化和蚀损的试验方法
- 2024年苏教版四年级数学上册全册教案
- 2024新科普版英语七年级上单词默写表
- 金融行业高质量发展专题研究报告
- 2024年首届全国“红旗杯”班组长大赛考试题库(单选、多选、判断题)
- 知识题库-人社练兵比武竞赛测试题及答案(五)
- 五年级上册科学青岛版全册教案
- 出入境证件承诺书
- 合理膳食 均衡营养课件
评论
0/150
提交评论