【教学课件】第十章内部排序.ppt
《【教学课件】第十章内部排序.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第十章内部排序.ppt(43页珍藏版)》请在三一办公上搜索。
1、第十章 内部排序,基本概念 插入排序 快速排序 选择排序 归并排序 基数排序,10.1 基本概念,设含有n个记录的文件R1,R2,.,Rn,其相应的关键字为K1,K2,.,Kn,将记录按关键字值非递减(或非递增)顺序排列的过程,称为排序。对所有的Ki=Kj(ij),若排序前Ri领先于Rj,排序后Ri仍领先于Rj,则称该排序方法是稳定的,反之,称为不稳定 的。稳定性是对序列中的两个相同的关键字在初始序列和最终有序序列中相对位置(即领先关系)是否变化。,10.1 基本概念,内部排序:待排序文件的全部记录存放在内存进行的排序,称为内部排序。外部排序:排序过程中需要进行内外存数据交换的排序,称为外部排
2、序。,10.1 基本概念,内排序分类 按排序过程依据的原则分为:插入排序 交换排序 选择排序 归并排序 计数排序 按排序过程所需的工作量分:简单排序 O(n2)先进排序 O(nlogn)基数排序 O(dn),10.2 插入排序,一.直接插入排序(最简单的排序方法)基本思想:依次将每个待排序的记录插入到一个有序子文件的合适位置(有序子文件记录数增1)例如:已有待排序文件为:38,65,49,76,97 首先将文件的第一个记录,视为有序文件,然后从第二个记录开始,直到最后一个记录,依次将他们插入到有序文件的合适位置。,10.2 插入排序,直接插入排序算法 PROC strainsort(VAR r
3、:filetype);FOR i:=2 TO n DO r0:=ri;j:=i-1;r1ri-1为有序子文件 WHILE r0.keyrj.key DO rj+1:=rj;j:=j-1;确定插入位置并移动 rj+1:=r0 ENDP;strainsort,10.2 插入排序,算法分析 空间上,只需i,j两个整型变量和一个记录的辅助空间r0,r0作为“监视哨”,控制待插入元素相对于有序子文件为最小时WHILE循环的结束,同时也用于暂存待插入元素。时间上,只包含比较关键字和移动记录两种操作。比较次数:1/.当待初始文件按关键字递增有序(正序)时:a.对每个记录只进行一次比较,整个排序过程共 n进行
4、了1=n-1次比较(最少);i=2 b.每个记录都要进行ri移到r0和r0移到rj+1两次移动,因此共移动2(n-1)次(最少)。,10.2 插入排序,2/.当待排序文件按关键字非递增有序(逆序)时 记录ri(i=2,3,.n)均要和前i-1个记录及r0进行比较,整个排序过程共进行了 n i=(n+2)(n-1)/2次比较(最多);i=2 移动记录次数:每个记录都要进行ri移动到r0和r0移动到rj+1两次移动,另外当ri.keyrj.key时,还将rj移动到rj+1,所以,当初始文件为正序时,移动记录次数最少为2(n-1)次,当初始文件为逆序时移动记录次数最多为 n(i-1)+2(n-1)=
5、(n+4)(n-1)/2次(最多)。i=2,10.2 插入排序,结论 1/.直接插入排序的效率与待排文件的关键字排列有关;2/.直接插入排序的时间复杂度为O(n2);3/.直接插入排序是稳定的(这一点由过程中WHILE语句的条件“”保证的)。,PROC strainsort(VAR r:filetype);FOR i:=2 TO n DO r0:=ri;j:=i-1;WHILE r0.keyrj.key DO rj+1:=rj;j:=j-1;rj+1:=r0 ENDP;strainsort,10.2 插入排序,二.折半插入排序 由于是在有序子文件中确定插入的位置,因此可用折半查找来代替直接插入
6、排序法中的顺序查找,从而可减少比较次数。,10.2 插入排序,PROC binsort(VAR r:listtype);FOR i:=2 TO n DO s:=1;j:=i-1;r0:=ri;WHILE sj DO m:=(s+j)/2;IF rikeyrmkey 确保稳定,若改为,则不稳定 THEN j:-1 ELSE s:=m+1;FOR k:=i-1 DOWNTO j+1 DO rk+1:=rk;rj+1:=r0 ENDP;binsort 移动次数未变,故仍为O(n2),10.2 插入排序,WHILE sj DO m:=(s+j)/2;IF rikeyrmkey 确保稳定,若改为,则不稳
7、定 THEN j:-1 ELSE s:=m+1;,10.2 插入排序,三.希尔排序(Shells Methool)(又称为缩小增量排序)基本思想:分割成若干个较小的子文件,对各个子文件分别进行直接插入排序,当文件达到基本有序时,再对整个文件进行一次直接插入排序。依据:若待排序文件基本有序,即文件中具有特性:ri.key Max rj 1ji的记录数较少,则文件中大多数记录都不需要进行插入。基本有序时,直接插入排序效率可以提高,接近于O(n)。,10.2 插入排序,例:设初始关键字为:49 38 65 97 76 13 27 49 55 04第一趟以步长为5分割为5个子文件:(R1,R6)(R2
8、,R7)(R3,R8)(R4,R6)(R5,R10),对每个子文件进行直接插入排序结果为:13 27 49 55 04 49 38 65 97 76第二趟以步长为3对第一趟排序结果分割为3 个子文件:(R1,R4,R7,R10)(R2,R5,R8)(R3,R6,R9)对每个子文件进行直接插入排序,结果为:13 04 49 38 27 49 55 65 97 76 第三趟以步长为1对第二趟排序结果进行直接插入排序,结果为:04 13 27 38 49 49 55 65 76 97,10.2 插入排序,4希尔排序的特点 子文件(子序列)的构成不是简单地“逐段分割”,而是将相隔某个“增量”的记录组成
9、一个子文件。增量序列应是递减,且最后一个必须为1。希尔排序法是不稳定的。,5.希尔排序算法的实现PROC shellsort(VAR r:ARRAY-d1:n OF rcdtype;d:ARRAY1.t OF integer);d1.dt为增量序列,r(-d1.n)中,-d1.0为各趟监视哨位,1.n为记录 k:=1;REPEAT dh:=dk;s:=-dh+1;s为哨兵位,dh为增量值 FOR i:=dh+1 TO n DO rs:=ri;j:=i-dh;WHILE rs.keyrj.key DO rj+dh:=rj;j:=j-dh;rj+dh:=rs;s:=s+1;IF s0 THEN s
10、:=-dh+1;k:=k+1 UNTIL dh=1ENDP;shellsort,10.2 插入排序,k:=1;REPEAT dh:=dk;s:=-dh+1;FOR i:=dh+1 TO n DO rs:=ri;j:=i-dh;WHILE rs.keyrj.key DO rj+dh:=rj;j:=j-dh;rj+dh:=rs;s:=s+1;IF s0 THEN s:=-dh+1;k:=k+1 UNTIL dh=1,10.2 插入排序,10.3 快速排序,快速排序是目前内部排序中最快的方法。基本思想:选取某个记录,(通常选文件的第一个记录),将所有关键字不大于它的记录放在它的前面,将所有关键字不小
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 第十 内部 排序

链接地址:https://www.31ppt.com/p-5664579.html