数据结构排序-课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构排序-课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 排序 课件
- 资源描述:
-
1、数据结构课程的内容数据结构课程的内容1PPT课件10.1 10.1 概述概述10.2 10.2 插入排序插入排序10.3 10.3 交换排序交换排序10.4 10.4 选择排序选择排序10.5 10.5 归并排序归并排序10.6 10.6 基数排序基数排序2PPT课件10.1 10.1 概述概述1.什么是排序?什么是排序?将一组杂乱无章的将一组杂乱无章的数据数据按一定的按一定的规律规律顺次排列起顺次排列起来。来。2.排序的目的是什么?排序的目的是什么?存放在数据表中存放在数据表中按关键字排序按关键字排序 便于查找!便于查找!3PPT课件10.1 10.1 概述概述3.排序算法的好坏如何衡量?排
2、序算法的好坏如何衡量?时间效率时间效率 排序速度(即排序所花费的全部比较次数)排序速度(即排序所花费的全部比较次数)空间效率空间效率 占内存辅助空间的大小占内存辅助空间的大小 若排序算法所需的辅助空间不依赖问题的规模n,即空间复杂度是O(1),则称排序方法是就地排序就地排序,否则是非就地排序非就地排序。稳稳 定定 性性 若两个记录若两个记录A A和和B B的关键字值相等,但排序的关键字值相等,但排序后后A A、B B的先后次序保持不变,则称这种排序算法是稳定的。的先后次序保持不变,则称这种排序算法是稳定的。4PPT课件4.什么叫内部排序?什么叫外部排序?什么叫内部排序?什么叫外部排序?若待排序
3、记录都在内存中,称为内部排序;若待排序记录都在内存中,称为内部排序;内部排序基本操作有两种:内部排序基本操作有两种:比较两个关键字的大小;(比不可少的操作比不可少的操作)存储位置的移动。若待排序记录一部分在内存,一部分在外存,若待排序记录一部分在内存,一部分在外存,则称为外部排序。则称为外部排序。注:注:外部排序时,要将数据分批调入内存来外部排序时,要将数据分批调入内存来排序,中间结果还要及时放入外存,显然外排序,中间结果还要及时放入外存,显然外部排序要复杂得多。部排序要复杂得多。5PPT课件5.待排序记录在内存中怎样存储和处理?待排序记录在内存中怎样存储和处理?处理方式:处理方式:顺序顺序排
4、序排序 数据间的逻辑顺序关系通过其物数据间的逻辑顺序关系通过其物理存储位置的相邻来体现,理存储位置的相邻来体现,排序时直接移动记录;排序时直接移动记录;适合数据较少的情况!链表链表排序排序 数据间的逻辑顺序关系通过结点数据间的逻辑顺序关系通过结点中的指针体现,中的指针体现,排序时只修改指针,不移动数据;排序时只修改指针,不移动数据;地址地址排序排序 数据存储在一段连续地址的空间,数据存储在一段连续地址的空间,构造一个辅助表保持各数据的存放地址(指针),构造一个辅助表保持各数据的存放地址(指针),排排序时先修改辅助表中的地址,最后再移动记录。序时先修改辅助表中的地址,最后再移动记录。适合数据较多
5、的情况适合数据较多的情况!6PPT课件注:注:大多数排序算法都是针对顺序表结构的大多数排序算法都是针对顺序表结构的(便于直接移动元素便于直接移动元素)6.6.顺序存储(顺序表)的抽象数据类型如何表示?顺序存储(顺序表)的抽象数据类型如何表示?Typedef struct /定义每个记录(数据元素)的结构定义每个记录(数据元素)的结构 KeyType key;/关键字关键字 InfoType otherinfo;/其它数据项其它数据项RecordType;Typedef struct /定义顺序表的结构定义顺序表的结构 RecordType r MAXSIZE+1;/存储顺序表的向量存储顺序表的
6、向量 /r0/r0一般作哨兵或缓冲区一般作哨兵或缓冲区 int length;/顺序表的长度顺序表的长度SqList;#define MAXSIZE 20 /设记录不超过设记录不超过2020个个typedef int KeyType;/设关键字为整型量(设关键字为整型量(intint型)型)7PPT课件7.内部排序的算法有哪些?内部排序的算法有哪些?按排序的规则不同,可分为按排序的规则不同,可分为5类:类:插入排序插入排序交换排序(重点是快速排序)交换排序(重点是快速排序)选择排序选择排序归并排序归并排序基数排序基数排序d关键字的位数关键字的位数(长度长度)按排序算法的时间复杂度不同,可分为按
7、排序算法的时间复杂度不同,可分为3类:类:简单的排序算法:时间效率低,简单的排序算法:时间效率低,O(n2)先进的排序算法先进的排序算法:时间效率高,时间效率高,O(nlog2n)基数排序算法:时间效率高,基数排序算法:时间效率高,O(dn)8PPT课件10.2 10.2 插入排序插入排序插入排序有多种具体实现算法:插入排序有多种具体实现算法:1)直接插入排序直接插入排序 2)折半插入排序折半插入排序 3)2路插入排序路插入排序 4)希尔排序希尔排序9PPT课件新元素插入到哪里?新元素插入到哪里?例例1 1:关键字序列关键字序列T=(13,6,3,31,9,27,5,11),),请写出直接插入
8、排序的中间过程序列。请写出直接插入排序的中间过程序列。【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】在已形成的在已形成的有序表中线性查找有序表中线性查找,并在,并在适当位置插入,把原来位置上的元素向后适当位置插入,把原来位置上的元素向后顺移顺移。10PPT课件例例2 2:关键字序列关键字序列T=(21,25,
9、49,25*,16,08),),请写出直接插入排序的具体实现过程。请写出直接插入排序的具体实现过程。*表示后一个表示后一个25250 1 2 3 4 5 6252525494949252525*161616080808解:解:假设该序列已存入一维数组假设该序列已存入一维数组V7V7中,将中,将V0V0作为缓冲或作为缓冲或暂存单元(暂存单元(TempTemp)。则程序执行过程为:)。则程序执行过程为:初态:初态:时间效率:时间效率:因为在因为在最坏情况下最坏情况下,所有元素的比较,所有元素的比较次数总和为(次数总和为(0 01 1n-1)O(nn-1)O(n2 2)。其他情况。其他情况下还要加上
10、移动元素的次数。下还要加上移动元素的次数。空间效率:空间效率:因为仅占用因为仅占用1 1个缓冲单元个缓冲单元算法的稳定性:算法的稳定性:因为因为2525*排序后仍然在排序后仍然在2525的后面。的后面。对应程序参见教材对应程序参见教材P265P265。11PPT课件Void InsertSort(SqList&L)/对顺序表对顺序表L做直接插入排序做直接插入排序 for(i=2;i=L.length;+i)if(LT(L.ri.key,L.ri-1.key)/“,需将需将L.ri插入有序子表插入有序子表 L.r0=L.ri;/复制为哨兵复制为哨兵 L.ri=L.ri-1;for(j=i-2;L
11、T(L.r0.key,L.ri.key);-j)L.r j+1=L.r j;/记录后移记录后移 L.r j+1=L.r0;/插入到正确位置插入到正确位置 /InsertSort12PPT课件13PPT课件nininnniRMNnn2)niKCN2222141221/)()(,/)(2214PPT课件15PPT课件优优 点:点:比较的次数大大减少。比较的次数大大减少。时间效率:时间效率:虽然比较次数大大减少,可惜移动次数并未减少,虽然比较次数大大减少,可惜移动次数并未减少,所以排序效率仍为所以排序效率仍为O(nO(n2 2)。空间效率:空间效率:O O(1 1)稳稳 定定 性:性:稳定稳定新元素
12、插入到哪里?新元素插入到哪里?在已形成的在已形成的有序表中折半查找有序表中折半查找,并在适,并在适当位置插入,把原来位置上的元素向后当位置插入,把原来位置上的元素向后顺移顺移。16PPT课件Void BInsertSort(SqList&L)/折半插入排序折半插入排序 for(i=2;i=L.length;+i)L.r0=L.r i;/将将L.r i 暂存到暂存到L.r0 low=1;high=i-1;while(low=high+1;-j)L.r j+1=L.r j;/记录后移记录后移 L.r high+1=L.r 0;/插入插入 /for /BInsertSort17PPT课件301370
13、85394262001234567813301370853942620012345678L H M初始i=213301370853942620012345678HL Mi=213303070853942620012345678Hji=213133070853942620012345678Hji=218PPT课件30137085394262001234567820613303942708520012345678LMH初始i=8i=8i=820613303942708520012345678LMH20613303942708520012345678L H M19PPT课件3013708539426
14、2001234567820613303942708520012345678HL M初始i=8i=8i=820613303942708520012345678Hj20613303942708585012345678Hji=820613303942707085012345678Hj20PPT课件301370853942620012345678初始i=820613303939427085012345678Hji=820613303039427085012345678H ji=820613203939427085012345678H ji=820613303942427085012345678Hj21
15、PPT课件22PPT课件讨论:讨论:若记录是链表结构,用直接插入排序行否?折半插入若记录是链表结构,用直接插入排序行否?折半插入排序呢?排序呢?答:答:直接插入不仅可行,而且还无需移动元素,时间效率更直接插入不仅可行,而且还无需移动元素,时间效率更高!高!23PPT课件)24PPT课件38例:例:关键字序列关键字序列 T=(49,38,65,97,76,13,27,49*,55,04),请写出希尔排序的具体实现过程。),请写出希尔排序的具体实现过程。0123456789104938659776132749*5504初初 态:态:第第1趟趟(dk=5)第第2趟趟(dk=3)第第3趟趟(dk=1)
16、4913134938276549*975576042738 65 49*9755135576045513270427044949*4949*763876 65 65 9797551327044949*3876 65 9713 27 0449*76 97 算法分析:算法分析:开始时开始时dk 的值较大,子序列中的对象较少,排序速度的值较大,子序列中的对象较少,排序速度较快;随着排序进展,较快;随着排序进展,dk 值逐渐变小,子序列中对象个数值逐渐变小,子序列中对象个数逐渐变多,由于前面工作的基础,大多数对象已基本有序,逐渐变多,由于前面工作的基础,大多数对象已基本有序,所以排序速度仍然很快。所以
17、排序速度仍然很快。25PPT课件void ShellSort(SqList&L,int dlta,int t)/按增量序列按增量序列dlta0t-1对顺序表对顺序表L作作Shell排序排序 for(k=0;kt;+k)ShellSort(L,dltak);/增量为增量为dltak的一趟插入排序的一趟插入排序 /ShellSort时间效率:时间效率:空间效率:空间效率:因为仅占用因为仅占用1 1个缓冲单元个缓冲单元算法的算法的稳定性:稳定性:因为因为4949*排序后却到排序后却到了了4949的的前面前面参见教材参见教材P272P272经验公式经验公式dkdk值依次装在值依次装在dltatdlta
18、t中中26PPT课件27PPT课件void ShellInsert(SqList&L,int dk)for(i=dk+1;i=L.length;+i)if(ri.key 0&(r0.keyrj.key);j=j-dk)rj+dk=rj;rj+dk=r0;参见教材参见教材P272P272/对顺序表对顺序表L进行一趟增量为进行一趟增量为dk的的Shell排序,排序,dk为步长因子为步长因子/开始将开始将ri 插入有序增量子表插入有序增量子表/暂存在暂存在r0/关键字较大的记录在子表中后移关键字较大的记录在子表中后移/在本趟结束时将在本趟结束时将ri插入到正确位置插入到正确位置28PPT课件课堂练习
19、:课堂练习:1.欲将序列(欲将序列(Q,H,C,Y,P,A,M,S,R,D,F,X)中的关键码按)中的关键码按字母升序重排,则字母升序重排,则初始步长为初始步长为4的希尔排序一趟的结果是?的希尔排序一趟的结果是?答:答:原始序列:原始序列:Q,H,C,Y,P,A,M,S,R,D,F,X shellshell一趟后:一趟后:2.以关键字序列(以关键字序列(256,301,751,129,937,863,742,694,076,438)为例,分别写出执行以下算法的)为例,分别写出执行以下算法的各趟各趟排序结束时,关排序结束时,关键字序列的状态,并说明这些排序方法中,哪些易于在链表(包键字序列的状态
20、,并说明这些排序方法中,哪些易于在链表(包括各种单、双、循环链表)上实现?括各种单、双、循环链表)上实现?直接插入排序直接插入排序 希尔排序(取希尔排序(取dk=5,3,1)P,Q,R,A,D,H,C,F,M,S,X,Y答:答:显然,直接插入排序方法易于在链表上实现;但希尔排显然,直接插入排序方法易于在链表上实现;但希尔排序方法因为是按增量选择记录,不易于在链表上实现。序方法因为是按增量选择记录,不易于在链表上实现。两种排序方法的中间状态分别描述如后:两种排序方法的中间状态分别描述如后:29PPT课件原始序列:原始序列:256256,301301,751751,129129,937937,86
21、3863,742742,694694,076076,438438 256256,301301,751751,129129,937937,863863,742742,694694,076076,438438 256256,301301,751751,129129,937937,863863,742742,694694,076076,438438 129129,256256,301301,751751,937937,863863,742742,694694,076076,438438 129129,256256,301301,751751,937937,863863,742742,694694,0
22、76076,438438 129129,256256,301301,751751,863863,937937,742742,694694,076076,438438 129129,256256,301301,742742,751751,863863,937937,694694,076076,438438 129129,256256,301301,694694,742742,751751,863863,937937,076076,438438 076076,129129,256256,301301,694694,742742,751751,863863,937937,438438 076076,
23、129129,256256,301301,438438,694694,742742,751751,863863,937937 第第1趟趟第第2趟趟第第3趟趟第第4趟趟第第5趟趟第第6趟趟第第7趟趟第第8趟趟第第9趟趟30PPT课件原始序列:原始序列:256256,301301,751751,129129,937937,863863,742742,694694,076076,438438256256,301301,751751,129129,937937,863863,742742,694694,076076,438438256256,301301,751751,129129,937937,86
24、3863,742742,694694,076076,438438256256,301301,694694,129129,937937,863863,742742,751751,076076,438438256256,301301,694694,076076,937937,863863,742742,751751,129129,438438256256,301301,694694,076076,438438,863863,742742,751751,129129,937937第第1趟趟dk=5第第2趟趟dk=3dk=3第第3趟趟dk=1dk=1256256,301301,694694,07607
25、6,438438,863863,742742,751751,129129,937937256256,301301,694694,076076,438438,863863,742742,751751,129129,937937076076,301301,694694,256256,438438,863863,742742,751751,129129,937937076076,301301,694694,256256,438438,863863,742742,751751,129129,937937076076,301301,694694,256256,438438,863863,742742,7
展开阅读全文