欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    数据结构第十章.ppt

    • 资源ID:5058968       资源大小:2.63MB        全文页数:56页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据结构第十章.ppt

    数据结构课程的内容,1,排序:将一个数据元素(或记录)的任意序列,重新 排列成一个按关键字有序的序列内部排序:将待排记录存放在计算机随机存储器重进 行的排序过程。外部排序:由于待排记录的数量很大,以至内存一次 不能容纳全部记录,在排序过程中尚需要 对外存进行访问的排序过程。,2,第十章 内部排序,第10章 内部排序,3,10.1 概述10.2 插入排序10.3 交换排序10.4 选择排序10.5 归并排序10.6 基数排序,4,10.1 概述,1、排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“按关键字有序”的记录序列。,52,49,80,36,14,58,61,23,97,75,14,23,36,49,52,58,61,75,80,97,一般情况下,假设含n个记录的序列为R1,R2,Rn其相应的关键字序列为 K1,K2,Kn,这些关键字相互之间可以进行比较,即在它们之间存在这样一个关系:Kp1=Kp2=Kpn按此固有关系将上式记录序列重新排列为Rp1,Rp2,Rpn的操作称作排序,5,2、关键字,数据对象有多个属性域,即多个数据成员组成,其中有一个属性域可以用来区分对象,作为排序依据,称为关键字。,关键字与记录之间是一对一的关系 称主关键字关键字与记录之间是一对多的关系 称次关键字,6,3、排序的目的是什么?,便于查找,4、排序算法的好坏如何衡量?,时间效率 排序速度(即排序所花费的全部比较次数)空间效率 占内存辅助空间的大小 稳定性 若两个记录A和B的关键字相等,但排序后A,B的先后次序保持不变,则称这种排序算法是稳定的。,7,5、什么叫内部排序?什么叫外部排序,若待排序记录都在内存中,称内部排序 若待排序记录一部分在内存,一部分在外存,则称为外部排序。注:外部排序时,要将数据分批掉入内存来排序,中间结果还要及时放入内存,显然外部排序要复杂得的多。,8,6、待排序记录在内存中怎样存储和处理,(1)顺序排序 排序时直接移动记录;(2)链表排序 排序时只移动指针;(3)地址排序 排序时先移动地址,最后再移动记录。,注:地址排序中可以增设一维数组来专门存放记录的地址。,9,6.顺序存储(顺序表)的抽象数据类型如何表示?,注:大多数排序算法都是针对顺序表结构的(便于直接移动元素),Typedef struct/定义每个记录(数据元素)的结构 KeyType key;/关键字 InfoType otherinfo;/其它数据项RecordType;,Typedef struct/定义顺序表的结构 RecordType r MAXSIZE+1;/存储顺序表的向量/r0一般作哨兵或缓冲区 int length;/顺序表的长度SqList;,#define MAXSIZE 20/设记录不超过20个typedef int KeyType;/设关键字为整型量(int型),7.内部排序的算法有哪些?,10,按排序的规则不同,可分为5类:插入排序交换排序(重点是快速排序)选择排序归并排序基数排序,d关键字的位数(长度),按排序算法的时间复杂度不同,可分为3类:简单的排序算法:时间效率低,O(n2)先进的排序算法:时间效率高,O(nlog2n)基数排序算算法:时间效率高,O(dn),11,10.2 插入排序,插入排序的基本思想是:,插入排序有多种具体实现算法:1)直接插入排序 2)折半插入排序 3)表插入排序 4)希尔排序,每步将一个待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象的适当位置上,直到对象全部插入为止。,简言之,边插入边排序,保证子序列中随时都是排好序的。,12,(1)直接插入排序,基本思想:假定前面m 个元素已经排序;取第(m+1)个元素,插入到前面的适当位置;一直重复,到m=n 为止。(初始情况下,m=1),13,例1:关键字序列T=(13,6,3,31,9,27,5,11),请写出直接插入排序的中间过程序列。,【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】,14,void InsertSort(SqList/插入到正确位置/InsertSort,15,例2:关键字序列T=(21,25,49,25*,16,08),请写出直接插入排序的具体实现过程。,*表示后一个25,i=1,21,i=2,i=3,i=5,i=4,i=6,25,25,25,49,49,49,25*,49,16,16,08,49,解:假设该序列已存入一维数组V7中,将V0作为缓冲或暂存单元(Temp)。则程序执行过程为:,初态:,16,25,21,16,完成!,时间效率:O(n2)因为在最坏情况下,所有元素的比较次数总和为(02n)O(n2)。其他情况下还要加上移动元素的次数。空间效率:O(1)因为仅占用1个缓冲单元算法的稳定性:稳定因为25*排序后仍然在25的后面。,特点:因为R1i-1是一个按关键字有序的有序序列,则可以利用折半查找实现在R1i-1中查找Ri的插入位置,如此实现的插入排序为折半插入排序。限制:必须采用顺序存储方式。,16,2)折半插入排序,17,(highlow,查找结束,插入位置为low 或high+1),(4236),(4253),18,2)折半插入排序,优点:比较的次数大大减少,全部元素比较次数仅为O(nlog2n)。时间效率:虽然比较次数大大减少,可惜移动次数并未减少,所以排序效率仍为O(n2)。空间效率:O(1)稳定性:稳定,讨论:若记录是链表结构,用直接插入排序行否?折半插入排序呢?答:直接插入不仅可行,而且还无需移动元素,时间效率更高!,但链表无法“折半”!,19,设待排序的关键码分别为 28,13,72,85,39,41,6,20。按二分法插入排序算法已使前七个记录有序,中间结果如下:,试在此基础上,沿用上述表达方式,给出继续采用二分法插入第八个记录的比较过程。在一些特殊情况下,二分法插入排序比直接插入排序要执行更多的比较。这句话对吗?,6 13 28 39 41 72 85 20,r=7,i=1,m=4,3)希尔(shell)排序(又称缩小增量排序),20,基本思想:先将整个待排记录序列分割成若干子序列,分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。技巧:子序列的构成不是简单地“逐段分割”,而是将相隔某个增量dk的记录组成一个子序列,让增量dk逐趟缩短(例如依次取5,3,1),直到dk1为止。优点:让关键字值小的元素能很快前移,且序列若基本有序时,再用直接插入排序处理,时间效率会高很多。,例:关键字序列 T=(49,38,65,97,76,13,27,49*,55,04),请写出希尔排序的具体实现过程。,21,38,初 态:,第1趟(dk=5),第2趟(dk=3),第3趟(dk=1),49,13,13,49,38,27,65,49*,97,55,76,04,27,38,65,49*,97,55,13,55,76,04,55,13,27,04,27,04,49,49*,49,49*,76,38,76,65,65,97,97,13,27,04,49*,76,97,算法分析:开始时dk 的值较大,子序列中的对象较少,排序速度较快;随着排序进展,dk 值逐渐变小,子序列中对象个数逐渐变多,由于前面工作的基础,大多数对象已基本有序,所以排序速度仍然很快。,ri,时间效率:,22,空间效率:O(1)因为仅占用1个缓冲单元算法的稳定性:不稳定因为49*排序后却到了49的前面,O(n1.25)O(1.6n1.25)经验公式,23,写出采用SHELL排序算法排序的每一趟的结果,并标出数据移动情况。(125,11,22,34,15,44,76,100,8,14,20,2,5),9.3 交换排序,24,两两比较待排序记录的关键码,如果发生逆序(即排列顺序与排序后的次序正好相反),则交换之,直到所有记录都排好序为止。,交换排序的主要算法有:1)冒泡排序 2)快速排序,交换排序的基本思想是:,1)冒泡排序,25,基本思路:每趟不断将记录两两比较,并按“前小后大”(或“前大后小”)规则交换。优点:每趟结束时,不仅能挤出一个最大值到最后面位置,还能同时部分理顺其他元素;一旦下趟没有交换发生,还可以提前结束排序。前提:顺序存储结构,例:关键字序列 T=(21,25,49,25*,16,08),请写出冒泡排序的具体实现过程。,21,25,49,25*,16,0821,25,25*,16,08,4921,25,16,08,25*,4921,16,08,25,25*,4916,08,21,25,25*,4908,16,21,25,25*,49,初态:第1趟第2趟第3趟第4趟第5趟,冒泡排序的算法分析,26,时间效率:O(n2)因为要考虑最坏情况空间效率:O(1)只在交换时用到一个缓冲单元稳 定 性:稳定 25和25*在排序前后的次序未改变,2)快速排序,27,从待排序列中任取一个元素(例如取第一个)作为中心,所有比它小的元素一律前放,所有比它大的元素一律后放,形成左右两个子表;然后再对各子表重新选择中心元素并依此规则调整,直到每个子表的元素只剩一个。此时便为有序序列了。,基本思想:,优点:因为每趟可以确定不止一个元素的位置,而且呈指数增加,所以特别快!前提:顺序存储结构,28,一趟快速排序采用从两头向中间扫描的办法。假设原始数据已存于一个一维数组r中,具体的做法是:设两个指示器i和j,初始时i指向数组中的第一个数据,j指向最末一个数据。i先不动使j逐步前移,每次对二者所指的数据进行比较,当遇到ri大于rj的情况时,就将二者对调位置;然后令j固定使i逐步后移做数据比较,当遇到ri大于rj 时,又进行位置对调;然后又是i不动使j前移作数据比较;如此反复进行,直至i与j两者相遇为止。,具体过程,2023/6/1,29,25*跑到了前面,不稳定!,Low=high=3,本趟停止,将支点定位并返回位置信息,10.3.2 快速排序,high,low,21,08,25,16,49,25*,3,21,pivotkey=21,08,25,16,49,(08,16)21(25*,49,25),low,low,high,high,high,例1:关键字序列 T=(21,25,49,25*,16,08),请写出快速排序的算法步骤。,例1:关键字序列 T=(21,25,49,25*,16,08),请写出快速排序的算法步骤。,30,(),,设以首元素为枢轴中心,21,25,49,25*,16,08,初态:第1趟:第2趟:第3趟:,08,16,21,25,25*,(49),21,16,08,,(),25,25*,49,(08),16,21,,25,(25*,49),例3:以关键字序列(256,301,751,129,937,863,742,694,076,438)为例,写出执行快速算法的各趟排序结束时,关键字序列的状态。,31,原始序列:256,301,751,129,937,863,742,694,076,438,快速排序,第1趟第2趟第3趟第4趟,256,301,751,129,937,863,742,694,076,438,076,129,256,751,937,863,742,694,301,438,要求模拟算法实现步骤,256,076,301,129,751,256,076,129,256,438,301,694,742,694,863,937,751,076,129,256,438,301,694,742,751,863,937,076,129,256,301,301,694,742,751,863,937,438,076,129,256,301,438,694,742,751,863,937,9.4 选择排序,32,选择排序有多种具体实现算法:1)简单选择排序 2)堆排序,选择排序的基本思想是:每一趟在后面n-i 个待排记录中选取关键字最小的记录作为有序序列中的第i 个记录。,1)简单选择排序,33,思路简单:每经过一趟比较就找出一个最小值,与待排序列最前面的位置互换即可。首先,在n个记录中选择最小者放到r1位置;然后,从剩余的n-1个记录中选择最小者放到r2位置;如此进行下去,直到全部有序为止。优点:实现简单缺点:每趟只能确定一个元素,表长为n时需要n-1趟前提:顺序存储结构,例:关键字序列T=(21,25,49,25*,16,08),请给出简单选择排序的具体实现过程。,34,原始序列:21,25,49,25*,16,08,直接选择排序,第1趟第2趟第3趟第4趟第5趟,08,25,49,25*,16,2108,16,49,25*,25,2108,16,21,25*,25,4908,16,21,25*,25,4908,16,21,25*,25,49,时间效率:O(n2)虽移动次数较少,但比较次数仍多。空间效率:O(1)无需任何附加单元!算法的稳定性:不稳定因为排序时,25*到了25的前面。,最小值 08 与r1交换位置,2)锦标赛排序(又称树形选择排序),35,基本思想:与体育比赛时的淘汰赛类似。首先对 n 个记录的关键字进行两两比较,得到 n/2 个优胜者(关键字小者),作为第一步比较的结果保留下来。然后在这 n/2 个较小者之间再进行两两比较,如此重复,直到选出最小关键字的记录为止。优点:减少比较次数,加快排序速度缺点:空间效率低,例:关键字序列T=(21,25,49,25*,16,08,63),请给出锦标赛排序的具体实现过程。,36,36,Winner(胜者),r1,注:为便于自动处理,建议每个记录多开两个特殊分量:,初态:,补足2k(k=log2n)个叶子结点,胜者树,第一趟:,37,37,第二趟:,16,16,16,r2,Winner(胜者),求次小值16时,只需比较2次,即只比较log2n-1次。,令其Tag0,不参与比较,38,令其Tag0,不参与比较,第三趟:,r3,Winner(胜者),63,21,第四趟:,r4,Winner(胜者),25,25,25,40,第五趟:,r5,Winner(胜者),25*,25*,41,第六趟:,r6,Winner(胜者),49,49,49,42,第七趟:,r7,Winner(胜者),63,2)堆排序,43,1.什么是堆?,堆的定义:设有n个元素的序列 k1,k2,kn,当且仅当满足下述关系之一时,称之为堆。,或者,i=1,2,n/2,2.怎样建堆?,3.怎样堆排序?,解释:如果让满足以上条件的元素序列(k1,k2,kn)顺次排成一棵完全二叉树,则此树的特点是:树中所有结点的值均大于(或小于)其左右孩子,此树的根结点(即堆顶)必最大(或最小)。,44,1,2,3,4,5,6,7,8,9,注意:对于结点i,in/2时,表示结点i为叶子结点。,例:,45,(大根堆),有序列T1=(08,25,49,46,58,67)和序列T2=(91,85,76,66,58,67,55),判断它们是否“堆”?,(小根堆),(小顶堆)(最小堆),(大顶堆)(最大堆),2.怎样建堆?,46,步骤:从最后一个非终端结点开始往前逐步调整,让每个双亲大于(或小于)子女,直到根结点为止。,例:关键字序列T=(21,25,49,25*,16,08),请建大根堆。,解:为便于理解,先将原始序列画成完全二叉树的形式:,完全二叉树的第一个非终端结点编号必为n/2!(性质5),注:终端结点(即叶子)没有任何子女,无需单独调整。,21,i=3:49大于08,不必调整;i=2:25大于25*和16,也不必调整;i=1:21小于25和49,要调整!,49,而且21还应当向下比较!,3.怎样进行堆排序?,47,关键:将堆的当前顶点输出后,如何将剩余序列重新调整为堆?方法:将当前顶点与堆尾记录交换,然后仿建堆动作重新调整,如此反复直至排序结束。,例:对刚才建好的大顶堆进行排序:,48,交换 1号与 6 号记录,49,08 25 21 25*16 49,从 1 号到 5 号 重新调整为最大堆,08,25,25*,25 08 21 25*16 49,08,25 25*21 08 16 49,50,从 1号到 4号 重新调整为最大堆,51,从 1 号到 3号 重新调整为最大堆,52,16 08 21 25*25 49,从 1 号到 2 号 重新调整为最大堆,9.5 归并排序,53,归并排序的基本思想是:将两个(或以上)的有序表组成新的有序表。更实际的意义:可以把一个长度为n 的无序序列看成是 n 个长度为 1 的有序子序列,首先做两两归并,得到 n/2 个长度为 2 的子序列;再做两两归并,如此重复,直到最后得到一个长度为 n 的有序序列。,例:关键字序列T=(21,25,49,25*,93,62,72,08,37,16,54),请给出归并排序的具体实现过程。,54,然后对这个有序表进行归并,如何进行?可以进行两两归并,设置两个指针,分别指向21,和25,然后把21与25进行比较,如果21较小则把21调出来,指针往后移,把25与25*进行比较,25较小,调出来,指针后移至到结束,然后把第二部分的数据调出来,则排序完成,然后再次进行归并,直到所有的数排序成功为止。,55,len=1,len=2,len=4,len=8,len=16,整个归并排序仅需log2n 趟,各种内部排序方法的比较(教材P289),56,

    注意事项

    本文(数据结构第十章.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开