数据结构排序精品课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构排序精品课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 排序 精品 课件
- 资源描述:
-
1、第10章 排序 陈守孔陈守孔 孟佳娜孟佳娜 陈卓陈卓第1页,共91页。本章目录10.1 概述概述10.2 插入排序插入排序 10.2.1 直接插入排序直接插入排序 10.2.2 折半插入排序折半插入排序 *10.2.3 二路插入排序二路插入排序 *10.2.4 表插入排序表插入排序 10.2.5 希尔排序希尔排序10.3 交换排序交换排序 10.3.1 起泡排序起泡排序 10.3.2 快速排序快速排序10.4 选择排序选择排序 10.4.1 直接选择排序直接选择排序 10.4.2 树形选择排序树形选择排序10.4.3 堆排序堆排序10.5 归并排序归并排序10.6 分配排序分配排序10.7 内
2、部排序方法的比较内部排序方法的比较10.8 外部排序外部排序 10.8.1 文件管理文件管理 10.8.2 外部排序外部排序 10.8.3 多路归并排序多路归并排序 10.8.4 置换选择排序置换选择排序 *10.8.5 最佳归并树最佳归并树 *10.8.6 磁带排序磁带排序第2页,共91页。主要内容知识点知识点1、排序的定义,排序可以看作是线性表的一种操作排序的定义,排序可以看作是线性表的一种操作2、排序的分类,稳定排序与不稳定排序的定义。、排序的分类,稳定排序与不稳定排序的定义。3、插入排序(直接插入、插入排序(直接插入、对分插入对分插入、二路插入、表插入、希尔插入排序)。、二路插入、表插
3、入、希尔插入排序)。4、交换排序(冒泡排序、交换排序(冒泡排序、快速排序快速排序)。)。5、选择排序(简单选择排序、树形选择排序、选择排序(简单选择排序、树形选择排序、堆排序堆排序)。)。6、归并排序、基数排序。、归并排序、基数排序。7、外部排序、外部排序重点难点重点难点1、各种排序所基于的基本思想。、各种排序所基于的基本思想。2、排序性能的分析,是否是稳定排序。、排序性能的分析,是否是稳定排序。3、折半插入、希尔排序折半插入、希尔排序。4、快速排序快速排序。5、堆排序堆排序。6、败者树、置换选择排序、败者树、置换选择排序、最佳归并树最佳归并树。7、对每种排序方法的学习,能举一反三。、对每种排
4、序方法的学习,能举一反三。第3页,共91页。基本概念 排序:排序:假设含假设含n个记录的序列为个记录的序列为R1,R2,Rn,其相应的关键字序列为其相应的关键字序列为 K1,K2,Kn,这些关键字相互之间可以进行比较,即在它们之间这些关键字相互之间可以进行比较,即在它们之间存在着这样一个关系存在着这样一个关系Ks1Ks2Ksn,按此固有关,按此固有关系将系将n个记录的序列重新排列为个记录的序列重新排列为 Rs1,Rs2,Rsn 的操的操作称作排序。作称作排序。第4页,共91页。基本概念稳定排序稳定排序:若若Ki为关键字,为关键字,Ki=Kj(ij),且在排序前),且在排序前的序列中的序列中Ri
5、领先于领先于Rj。经过排序后,。经过排序后,Ri与与Rj的相对次序的相对次序保持不变(即保持不变(即Ri仍领先于仍领先于Rj),则称这种排序方法是),则称这种排序方法是稳稳定的定的,否则称之为,否则称之为不稳定的。不稳定的。内部排序内部排序 :若整个排序过程不需要访问外存便能完成,:若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序则称此类排序问题为内部排序 外部排序外部排序:若参加排序的记录数量很大,整个序列的:若参加排序的记录数量很大,整个序列的排序过程不可能一次在内存中完成,则称此类排序问排序过程不可能一次在内存中完成,则称此类排序问题为外部排序题为外部排序 第5页,共91
6、页。排序的类型定义#define n 待排序记录的个数待排序记录的个数typedef struct int key;AnyType other;记录其它数据域记录其它数据域 RecType;RecType Rn+1;第6页,共91页。基本思想基本思想:假定第一个记录有序假定第一个记录有序,从第从第2 2个记录开始,将个记录开始,将待排序的记录插入到有序序列中,使有序序列逐渐扩大,直待排序的记录插入到有序序列中,使有序序列逐渐扩大,直至所有记录都进入有序序列中。至所有记录都进入有序序列中。插入排序 插入排序种类插入排序种类:直接插入排序直接插入排序 折半插入排序折半插入排序 二路插入排序二路插入
7、排序 表插入排序表插入排序 希尔排序希尔排序 第7页,共91页。直接插入排序基本思想基本思想:将记录Ri(2=i=n)插入到有序子序列R1.i-1中,使记录的有序序列从R1.i-1变为R1.i 第8页,共91页。示例初始关键字序列:51 33 62 96 87 17 28 51i=2(33)33 51 62 96 87 17 28 51i=3(62)33 51 62 96 87 17 28 51i=4(96)33 51 62 96 87 17 28 51i=5(87)33 51 62 87 96 17 28 51i=6(17)17 33 51 62 87 96 28 51i=7(28)17 2
8、8 33 51 62 87 96 51i=8(51)17 28 33 51 51 62 87 96第9页,共91页。一趟直接插入排序算法void StrOnePass(RecType R,int i)已知已知R1.i-1中的记录按关键字非递减有序排列,本算法中的记录按关键字非递减有序排列,本算法 插入插入Ri,使使R1.i中的记录按关键字非递减有序排列中的记录按关键字非递减有序排列 R0=Ri;j=i-1;将待排序记录放进监视哨将待排序记录放进监视哨 x=R0.key;从后向前查找插入位置,将大于待排序记录向后移动从后向前查找插入位置,将大于待排序记录向后移动 while(x Rj.key)R
9、j+1=Rj;j-;记录后移记录后移 Rj+1=R0;将待排序记录放到合适位置将待排序记录放到合适位置 StrOnePass第10页,共91页。直接插入排序算法void StrInsSort1(RecType R,int n)本算法对本算法对R1.n进行直接插入排序进行直接插入排序 for(i=2;i=n;i+)假定第一个记录有序假定第一个记录有序 StrOnePass(R,i);第11页,共91页。直接插入排序性能分析 最好情况最好情况比较次数为n1次移动次数为2(n1)次w最坏情况最坏情况比较次数为 =(n+2)(n-1)/2 n2ii移动次数为 =(n+4)(n-1)/2 n2)21(i
10、i第12页,共91页。折半插入排序折半插入排序void BinsSort(RecType R,int n)对对R1.n进行折半插入排序进行折半插入排序 for(i=2;i=n;i+)假定第一个记录有序假定第一个记录有序 R0=Ri;将待排记录将待排记录Ri暂存到暂存到R0 low=1;high=i-1;设置折半查找的范围设置折半查找的范围 Rlow.high while(low=high)m=(low+high)/2;折半折半 if(R0.keyhigh;j-)Rj+1=Rj;记录后移记录后移 Rhigh+1=R0;插入插入 forBinsSort第13页,共91页。折半插入排序性能分析折半插
11、入排序性能分析 减少了比较次数,移动次数不变。时间复杂度仍为O(n2)。第14页,共91页。在对一组记录在对一组记录(5454,3838,9696,2323,1515,7272,6060,4545,8383)进行直接排序时,当把第进行直接排序时,当把第7 7个记录个记录6060插入到有插入到有序表时,为寻找插入位置需比较多少次序表时,为寻找插入位置需比较多少次第15页,共91页。二路插入排序二路插入排序 对折半插入排序改进,减少了移动记录的次数,但它对折半插入排序改进,减少了移动记录的次数,但它要借助要借助n个记录的辅助空间,即其空间复杂度为个记录的辅助空间,即其空间复杂度为O(n)。)。基本
12、思想:另设一数组基本思想:另设一数组d,将,将R1赋值给赋值给d1,并将,并将d1看作排好序的中间记录,从第二个记录起依次将看作排好序的中间记录,从第二个记录起依次将关键字小于关键字小于d1的记录插入的记录插入d1之前的有序序列,将之前的有序序列,将关键字大于关键字大于d1的记录插入的记录插入d1之后的有序序列。之后的有序序列。借助两个变量借助两个变量first和和final来指示排序过程中有序序列来指示排序过程中有序序列第一个记录和最后一个记录在第一个记录和最后一个记录在d中的位置。中的位置。第16页,共91页。初始关键字序列:初始关键字序列:51 33 62 96 87 17 28 51
13、i=1 51 firstfinali=2 51 33 final firsti=3 51 62 33 final firsti=4 51 62 96 33 final firsti=5 51 62 87 96 33 final firsti=6 51 62 87 96 17 33 final first i=7 51 62 87 96 17 28 33 final first i=8 51 51 62 87 96 17 28 33 final first 第17页,共91页。二路插入排序算法二路插入排序算法 void BiInsertSort(RecType R,int n)二路插入排序的算法
14、二路插入排序的算法 int dn+1;辅助存储辅助存储 d1=R1;first=1;final=1;for(i=2;i=d1.key)插入后部插入后部 low=1;high=final;while(low=high)折半查找插入位置折半查找插入位置 m=(low+high)/2;if(Ri.key=high+1;j-)dj+1=dj;移动元素移动元素 dhigh+1=Ri;final+;插入有序位置插入有序位置 第18页,共91页。else if(first=1)插入前部插入前部 first=n;dn=Ri;else low=first;high=n;while(low=high)m=(low
15、+high)/2;if(Ri.key dm.key)high=m-1;else low=m+1;while for(j=first;j=high;j+)dj-1=dj;移动元素移动元素 dhigh=Ri;first-;if if /for 第19页,共91页。表插入排序表插入排序 静态链表静态链表#define n 待排序记录的个数待排序记录的个数 typedef struct int key;AnyType other;记录其他数据域记录其他数据域 int next;STListType;STListType SLn+1;第20页,共91页。表插入排序算法表插入排序算法 void ListI
16、nsSort(STListType SL,int n)对记录序列对记录序列SL1.n作表插入排序。作表插入排序。SL0.key=MAXINT;SL0.next=1;SL1.next=0;for(i=2;i=n;i+)查找插入位置查找插入位置 j=0;for(k=SL0.next;SLk.key=SLi.key;)j=k,k=SLk.next;SLj.next=i;SLi.next=k;结点结点i插入在结点插入在结点j和结点和结点k之间之间 for ListInsSort第21页,共91页。表物理排序表物理排序void Arrange(STListType SL,int n)调整静态链表调整静态
17、链表SL中各结点的指针值,使记录按关键字有序排列中各结点的指针值,使记录按关键字有序排列 p=SL0.next;p指示第一个记录的当前位置指示第一个记录的当前位置 for(i=1;in;i+)SL1.i-1 记录已按关键字有序,第记录已按关键字有序,第i个记录的当前位置应不小于个记录的当前位置应不小于i while(p=1;d=d/2)for(i=1+d;i0&R0.keyaj+1),则将其交换,),则将其交换,最终达到有序化最终达到有序化 第28页,共91页。起泡排序示例初始关键字序列:初始关键字序列:51 33 62 96 87 17 28 51第一趟排序结果:第一趟排序结果:33 51
18、62 87 17 28 51 96 第二趟排序结果:第二趟排序结果:33 51 62 17 28 51 87 96 第三趟排序结果:第三趟排序结果:33 51 17 28 51 62 87 96 第四趟排序结果:第四趟排序结果:33 17 28 51 51 62 87 96 第五趟排序结果:第五趟排序结果:17 28 33 51 51 62 87 96 第六趟排序结果:第六趟排序结果:17 28 33 51 51 62 87 96 第29页,共91页。void BubbleSort(RecType R,int n)起泡排序起泡排序 i=n;i 指示无序序列中最后一个记录的位置指示无序序列中最后
19、一个记录的位置 while(i1)lastExchange=1;记最后一次交换发生的位置记最后一次交换发生的位置 for(j=1;jRj+1.key)temp=Rj;Rj=Rj+1;Rj+1=temp;逆序时交换逆序时交换 lastExchange=j;if i=lastExchange;while 起泡排序算法第30页,共91页。一组关键字一组关键字(19,01,26,92,87,11,43,87,2119,01,26,92,87,11,43,87,21),),进行冒泡排序,进行冒泡排序,试列出每一趟排序后的关键字序列试列出每一趟排序后的关键字序列 第31页,共91页。快速排序 基本思想基本
20、思想:从待排序记录序列中任选取一个记:从待排序记录序列中任选取一个记录(通常可选第一个记录)的关键字作为录(通常可选第一个记录)的关键字作为枢轴枢轴(或支点),凡其关键字小于枢轴的记录均(或支点),凡其关键字小于枢轴的记录均移动至该记录之前,而关键字大于枢轴的记移动至该记录之前,而关键字大于枢轴的记录均移动至该记录之后。一趟快速排序后就录均移动至该记录之后。一趟快速排序后就将排序序列分成两部分,再分别对这两部分将排序序列分成两部分,再分别对这两部分递归递归快速排序。快速排序。由由Hoare(图灵奖获得者图灵奖获得者)1962年提出,被评为年提出,被评为20世世纪十大优秀算法之一纪十大优秀算法之
21、一。第32页,共91页。快速排序图示1n第33页,共91页。快速排序示例初始关键字序列初始关键字序列:51 33 62 96 87 17 28 51R0=51 i(枢轴枢轴)jj向前扫描向前扫描 i j第一次交换之后:第一次交换之后:28 33 62 96 87 17 51 i ji向后扫描向后扫描 i j第二次交换之后:第二次交换之后:28 33 96 87 17 62 51 i jj向前扫描向前扫描 i j 第三次交换之后:第三次交换之后:28 33 17 96 87 62 51i向后扫描向后扫描 i j 第四次交换之后:第四次交换之后:28 33 17 87 96 62 51j向前扫描向
22、前扫描 i j 完成一趟排序:完成一趟排序:28 33 17 51 87 96 62 51 ij 第34页,共91页。快速排序示例初始关键字序列初始关键字序列:51 33 62 96 87 17 28 51一趟排序之后一趟排序之后:28 33 17 51 87 96 62 51 分别进行快速排序:分别进行快速排序:17 28 33 结束结束 结束结束 51 62 87 96 51 62 结束结束 结束结束有序序列:有序序列:17 28 33 51 51 62 87 96第35页,共91页。快速排序算法int Partition(RecType R,int l,int h)交换记录子序列交换记录
23、子序列Rl.h中的记录,使枢轴记录到位并返回其所在位置中的记录,使枢轴记录到位并返回其所在位置 int i=l;j=h;用变量用变量i,j记录待排序记录首尾位置记录待排序记录首尾位置 R0=Ri;以子表的第一个记录作枢轴,将其暂存到记录以子表的第一个记录作枢轴,将其暂存到记录R0中中 x=Ri.key;用变量用变量x存放枢轴记录的关键字存放枢轴记录的关键字 while(ij)从表的两端交替地向中间扫描从表的两端交替地向中间扫描 while(i=x)j-;Ri=Rj;将比枢轴小的记录移到低端将比枢轴小的记录移到低端 while(ij&Ri.key=x)i+;Rj=Ri;将比枢轴大的记录移到高端将
24、比枢轴大的记录移到高端 while Ri=R0;枢轴记录到位枢轴记录到位 return i;返回枢轴位置返回枢轴位置Partition 第36页,共91页。快速排序算法void QuickSort(RecType R,int s,int t)对记录序列对记录序列Rs.t进行快速排序进行快速排序 if(st)k=Partition(R,s,t);QuickSort(R,s,k-1);QuickSort(R,k+1,t);if QuickSort 快速排序的快速排序的平均时间复杂度平均时间复杂度为为O(nlog2n)最差为最差为O(n2)第37页,共91页。对下列一组关键字对下列一组关键字(46,
25、58,15,45,90,18,10,6246,58,15,45,90,18,10,62)试写出快速排序的每一趟的排序结果试写出快速排序的每一趟的排序结果 第38页,共91页。选择排序 基本思想基本思想:依次从待排序记录序列中选择出关键字值最:依次从待排序记录序列中选择出关键字值最小(或最大)的记录、关键字值次之的记录、小(或最大)的记录、关键字值次之的记录、,并分别将它们定位到序列左侧(或右侧)的第并分别将它们定位到序列左侧(或右侧)的第1个位个位置、第置、第2 2个位置、个位置、,从而使待排序的记录序列成为,从而使待排序的记录序列成为按关键字值由小到大(或由大到小)排列的有序序列。按关键字值
展开阅读全文