[工学]数据结构第23讲-插入排序2和交换排序-C课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《[工学]数据结构第23讲-插入排序2和交换排序-C课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 工学 数据结构 23 插入 排序 交换 _C 课件
- 资源描述:
-
1、10.2 10.2 插入排序插入排序v 直接插入排序直接插入排序v 折半插入排序折半插入排序v 2-2-路插入排序路插入排序v 表插入排序表插入排序 v 希尔排序希尔排序4.4.表插入排序表插入排序1 1)基本思想)基本思想 通过改变排序过程中采用的存储结构,减少通过改变排序过程中采用的存储结构,减少在排序过程中进行在排序过程中进行“移动移动”记录的操作。记录的操作。利用静利用静态链表进行排序态链表进行排序,并在排序完成之后,一次性地,并在排序完成之后,一次性地调整各个记录相互之间的位置,即将每个记录都调整各个记录相互之间的位置,即将每个记录都调整到它们所应该在的位置上调整到它们所应该在的位置
2、上。#define MAXSIZE 100 /#define MAXSIZE 100 /静态链表容量静态链表容量Typedef structTypedef struct RcdType rc RcdType rc;/;/记录项记录项 intint next;/next;/指针项指针项 SLNode SLNode;/;/表结点类型表结点类型Typedef structTypedef struct SLNode SLNode rMAXSIZE+1;/0 rMAXSIZE+1;/0号单元为表头结点号单元为表头结点 intint length;/length;/链表当前长度链表当前长度 SLinkLi
3、stType SLinkListType;/;/静态链表类型静态链表类型2 2)待排记录序列的存储结构)待排记录序列的存储结构3 3)具体做法)具体做法 首先将静态链表中数组下标为首先将静态链表中数组下标为“1”1”的分的分量(结点)和表头结点构成一个循环链表,然量(结点)和表头结点构成一个循环链表,然后依次将下标为后依次将下标为“2”2”至至“n”n”的分量(结点)的分量(结点)按记录关键字非递减有序插入到循环链表中。按记录关键字非递减有序插入到循环链表中。初始初始状态状态0 01 12 23 34 45 56 67 78 8MAXINTMAXINT494938386565979776761
4、313272749491 10 0-i=3i=30 01 12 23 34 45 56 67 78 8MAXINTMAXINT494938386565979776761313272749492 20 01 1-key域域next域域i=2i=20 01 12 23 34 45 56 67 78 8MAXINTMAXINT494938386565979776761313272749491 10 0-38123650i=4i=40 01 12 23 34 45 56 67 78 8MAXINTMAXINT494938386565979776761313272749492 23 31 10 0-97
5、40i=5i=50 01 12 23 34 45 56 67 78 8MAXINTMAXINT494938386565979776761313272749492 23 31 14 40 0-i=6i=60 01 12 23 34 45 56 67 78 8MAXINTMAXINT494938386565979776761313272749492 23 31 15 50 04 4-i=7i=70 01 12 23 34 45 56 67 78 8MAXINTMAXINT494938386565979776761313272749496 63 31 15 50 04 42 2-i=8i=80 01
6、 12 23 34 45 56 67 78 8MAXINTMAXINT494938386565979776761313272749496 63 31 15 50 04 47 72 2-76764 45 513136 62 227277 72 2493 38 84 4)表插入排序性能分析)表插入排序性能分析 从表插入排序的过程可见,表插入排序的基从表插入排序的过程可见,表插入排序的基本操作仍是将一个记录插入到已排好序的有序表本操作仍是将一个记录插入到已排好序的有序表当中。和直接插排序相比,不同之处当中。和直接插排序相比,不同之处仅是以修改仅是以修改2n2n次指针值代替移动记录次指针值代替移动记录
7、,排序过程中所需进行,排序过程中所需进行的关键字间的的关键字间的比较次数相同比较次数相同。因此。因此表插入排序的表插入排序的时间复杂度仍是时间复杂度仍是O(nO(n2 2)。4 4)表插入排序性能分析)表插入排序性能分析 表插入排序的结果只是求得一个有序链表,表插入排序的结果只是求得一个有序链表,则只能对它进行顺序查找,不能进行随机查找,则只能对它进行顺序查找,不能进行随机查找,为了能实现有序表的折半查找,尚需对记录进行为了能实现有序表的折半查找,尚需对记录进行重新排列。重新排列。5.5.希尔排序希尔排序1 1)基本思想)基本思想 又称为又称为“缩小增量排序缩小增量排序”。先将整个待排。先将整
8、个待排元素序列分割成若干个子序列(由相隔某个元素序列分割成若干个子序列(由相隔某个“增增量量”的元素组成的)分别进行直接插入排序,待的元素组成的)分别进行直接插入排序,待整个序列中的元素基本有序整个序列中的元素基本有序(增量足够小)时,(增量足够小)时,再对全体元素进行一次直接插入排序(再对全体元素进行一次直接插入排序(接近最好接近最好情况,效率很高情况,效率很高),因此希尔排序在时间效率上),因此希尔排序在时间效率上比前两种方法有较大提高。比前两种方法有较大提高。3 31 12 23 34 45 56 66565494997972525252513132 21 12 23 34 45 56
9、62525252513136565494997971 11 12 23 34 45 56 61313252525256565494997971 12 23 34 45 56 6131325252525494965659797增量增量3 3增量增量2 2增量增量1 1希希尔尔排排序序过过程程void ShellInsert(SqList&L,int dkvoid ShellInsert(SqList&L,int dk)/一趟希尔插入排序。本算法对直接插入算法作了以下修改:一趟希尔插入排序。本算法对直接插入算法作了以下修改:/1./1.前后记录位置的增量是前后记录位置的增量是dkdk,而不是,而不
10、是1 1;/2.L.r0/2.L.r0只是暂存单元,不是哨兵。当只是暂存单元,不是哨兵。当j=0j=0时,插入位置已找到时,插入位置已找到 for(i=dk+1;i=L.lengthfor(i=dk+1;i=L.length;+i);+i)if(L.ri.key L.ri-dk.key if(L.ri.key0&(L.r0.key0&(L.r0.key L.rj.key);j-=dk)L.rj+dk=L.rj L.rj+dk=L.rj;/记录后移,查找插入位置记录后移,查找插入位置 L.rj+dkL.rj+dk=L.r0;=L.r0;/插入插入 /ShellInsert/ShellInsert
展开阅读全文