数据结构第23讲_插入排序2和交换排序_C.ppt
《数据结构第23讲_插入排序2和交换排序_C.ppt》由会员分享,可在线阅读,更多相关《数据结构第23讲_插入排序2和交换排序_C.ppt(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、10.2 10.2 插入排序插入排序v 直接插入排序直接插入排序v 折半插入排序折半插入排序v 2-2-路插入排序路插入排序v 表插入排序表插入排序 v 希尔排序希尔排序4.4.表插入排序表插入排序1 1)基本思想)基本思想 通过改变排序过程中采用的存储结构,减少通过改变排序过程中采用的存储结构,减少在排序过程中进行在排序过程中进行“移动移动”记录的操作。记录的操作。利用静利用静态链表进行排序态链表进行排序,并在排序完成之后,一次性地,并在排序完成之后,一次性地调整各个记录相互之间的位置,即将每个记录都调整各个记录相互之间的位置,即将每个记录都调整到它们所应该在的位置上调整到它们所应该在的位置
2、上。#define MAXSIZE 100 /#define MAXSIZE 100 /静态链表容量静态链表容量TypedefTypedef structstruct RcdTypeRcdType rcrc;/;/记录项记录项 intint next;/next;/指针项指针项 SLNodeSLNode;/;/表结点类型表结点类型TypedefTypedef structstruct SLNodeSLNode rMAXSIZE+1;/0 rMAXSIZE+1;/0号单元为表头结点号单元为表头结点 intint length;/length;/链表当前长度链表当前长度 SLinkListType
3、SLinkListType;/;/静态链表类型静态链表类型2 2)待排记录序列的存储结构)待排记录序列的存储结构3 3)具体做法)具体做法 首先将静态链表中数组下标为首先将静态链表中数组下标为“1”1”的分的分量(结点)和表头结点构成一个循环链表,然量(结点)和表头结点构成一个循环链表,然后依次将下标为后依次将下标为“2”2”至至“n”n”的分量(结点)的分量(结点)按记录关键字非递减有序插入到循环链表中。按记录关键字非递减有序插入到循环链表中。初始初始状态状态0 01 12 23 34 45 56 67 78 8MAXINTMAXINT4949383865659797767613132727
4、49491 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-9740i=5i=
5、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 12 23
6、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 6252525
9、2513136565494997971 11 12 23 34 45 56 61313252525256565494997971 12 23 34 45 56 6131325252525494965659797增量增量3 3增量增量2 2增量增量1 1希希尔尔排排序序过过程程void void ShellInsertShellInsert(SqListSqList&L,&L,intint dkdk)/一趟希尔插入排序。本算法对直接插入算法作了以下修改:一趟希尔插入排序。本算法对直接插入算法作了以下修改:/1/1.前后记录位置的增量是前后记录位置的增量是dkdk,而不是而不是1 1;/2.L.r
10、0/2.L.r0只是暂存单元,不是哨兵。当只是暂存单元,不是哨兵。当j=0j=0时,插入位置已找到时,插入位置已找到 for(i=dk+1;i=for(i=dk+1;i=L.lengthL.length;+i);+i)if(if(L.ri.keyL.ri.key 0&(L.r0.key0&(L.r0.key L.rj.key);jL.rj.key);j-=-=dkdk)L.rj+dkL.rj+dk=L.rjL.rj;/记录后移,查找插入位置记录后移,查找插入位置 L.rj+dkL.rj+dk=L.r0;=L.r0;/插入插入 /ShellInsertShellInsert2 2)希尔排序算法描
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 23 插入 排序 交换 _C
限制150内