数据结构第3章内部排序课件.ppt

上传人(卖家):三亚风情 文档编号:3325475 上传时间:2022-08-20 格式:PPT 页数:37 大小:1.43MB
下载 相关 举报
数据结构第3章内部排序课件.ppt_第1页
第1页 / 共37页
数据结构第3章内部排序课件.ppt_第2页
第2页 / 共37页
数据结构第3章内部排序课件.ppt_第3页
第3页 / 共37页
数据结构第3章内部排序课件.ppt_第4页
第4页 / 共37页
数据结构第3章内部排序课件.ppt_第5页
第5页 / 共37页
点击查看更多>>
资源描述

1、第三章 内部排序u主要教学目标:主要教学目标:掌握插入排序、交换排序、选择排序、归并排序的方法及其时间复杂度分析;了解基数排序方法及其性能分析方法理解教学方法及教学手段:教学方法及教学手段:理论讲授与上机实践相结合教学重点及难点:教学重点及难点:各种排序算法及时间复杂度分析排序定义将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列叫排序分类v按待排序记录所在位置l内部排序:待排序记录存放在内存l外部排序:排序过程中需对外存进行访问的排序v按稳定性l稳定的 若ki=kj,(ij)若排序后一定ijl不稳定的若ki=kj,(ij)若排序后不一定ijv按排序依据原则l插入排序:直接插

2、入排序、折半插入排序、希尔排序l交换排序:冒泡排序、快速排序l选择排序:简单选择排序、堆排序l归并排序:2-路归并排序,多路归并l基数排序排序基本操作v比较两个关键字大小v将记录从一个位置移动到另一个位置直接插入排序v排序过程:整个排序过程为n-1趟插入,即先将序列中第1个记录看成是一个有序子序列,然后从第2个记录开始,逐个进行插入,直至整个序列有序算法描述:void insertion_sort(int a,int n)int i,j,t;for(i=1;i=0&taj;j-)aj+1=aj;aj+1=t;3.1 插入排序例49 38 65 97 76 13 27i=2 38 (38 49)

3、65 97 76 13 27i=3 65 (38 49 65)97 76 13 27i=4 97 (38 49 65 97)76 13 27i=5 76 (38 49 65 76 97)13 27i=6 13 (13 38 49 65 76 97)27i=1 ()i=7 (13 38 49 65 76 97)2727jjjjjj977665493827 (13 27 38 49 65 76 97)排序结果:v算法评价l时间复杂度u若待排序记录按关键字从小到大排列(正序)Y关键字比较次数:112nniY记录移动次数:)1(222nniu若待排序记录按关键字从大到小排列(逆序)Y关键字比较次数:2

4、)1)(2(2nniniY记录移动次数:2)1)(4()1(2nniniu若待排序记录是随机的,取平均值Y关键字比较次数:42nY记录移动次数:42nT(n)=O(n)l空间复杂度:S(n)=O(1)l稳定性:稳定折半插入排序v排序过程:用折半查找方法确定插入位置的排序叫例i=1 (30)13 70 85 39 42 6 20i=2 13 (13 30)70 85 39 42 6 20i=7 6 (6 13 30 39 42 70 85)20.i=8 20 (6 13 30 39 42 70 85)20sjmi=8 20 (6 13 30 39 42 70 85)20sjmi=8 20 (6

5、13 30 39 42 70 85)20sjmi=8 20 (6 13 30 39 42 70 85)20sji=8 20 (6 13 20 30 39 42 70 85)v算法描述v算法评价l时间复杂度:T(n)=O(n)l空间复杂度:S(n)=O(1)Ch8_2.cv排序过程l首先通过n-1次关键字比较,从n个记录中找出关键字最小的记录,将它与第一个记录交换l再通过n-2次比较,从剩余的n-1个记录中找出关键字次小的记录,将它与第二个记录交换l重复上述操作,共进行n-1趟排序后,排序结束3.2 选择排序例初始:49 38 65 97 76 13 27 kjjjjjjkki=11349一趟:

6、13 38 65 97 76 49 27 i=2kkjjjjj2738二趟:13 27 65 97 76 49 38 三趟:13 27 38 97 76 49 65 四趟:13 27 38 49 76 97 65 五趟:13 27 38 49 65 97 76 六趟:13 27 38 49 65 76 97 排序结束:13 27 38 49 65 76 97v算法描述:void selection_sort(int a,int n)int i,j,k;for(i=0;in-1;i+)k=i;for(j=i+1;jaj)k=j;t=ai;ai=ak;ak=t;v算法评价l时间复杂度T(n)=O(

7、n)l空间复杂度S(n)=O(1)u记录移动次数Y最好情况:0Y最坏情况:3(n-1)u比较次数:u稳定性:不稳定)(21)(211nninniv排序过程l将第一个记录的关键字与第二个记录的关键字进行比较,若为逆序a0a1,则交换;然后比较第二个记录与第三个记录;依次类推,直至第n-1个记录和第n个记录比较为止第一趟冒泡排序,结果关键字最大的记录被安置在最后一个记录上l对前n-1个记录进行第二趟冒泡排序,结果使关键字次大的记录被安置在第n-1个记录位置l重复上述过程,直到“在一趟排序过程中没有进行过交换记录的操作”为止3.3 冒泡排序例49 38 65 97 76 13 27 30初始关键字3

8、8 49 65 76 13 27 30 97第一趟38 49 65 13 27 30 76第二趟38 49 13 27 30 65第三趟38 13 27 30 49第四趟13 27 30 38第五趟13 27 30第六趟38497697139727973097137676762730136527653065131349493049273827383038v算法描述:void bubble_sort(int a,int n)int i,j,t,tag=1;for(i=0;in-1&tag=1;i+)tag=0;for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=t;tag=1;v算法

9、评价l时间复杂度 T(n)=O(n)u最好情况(正序)Y比较次数:n-1Y移动次数:0u最坏情况(逆序)Y比较次数:u移动次数:u空间复杂度:S(n)=O(1)稳定性:稳定)(21)(211nninni)(23)(321nninniv排序过程:先取一个正整数d1n,把所有相隔d1的记录放一组,组内进行直接插入排序;然后取d2d1,重复上述分组和排序操作;直至di=1,即所有记录放进一个组中排序为止。v增量常用公式:l di+1=|di/2|3.4希尔排序(缩小增量法)取d3=1三趟分组:13 27 48 55 4 49 38 65 97 76三趟排序:4 13 27 38 48 49 55 6

10、5 76 97例 初始:49 38 65 97 76 13 27 48 55 4一趟排序:13 27 48 55 4 49 38 65 97 76二趟排序:13 4 48 38 27 49 55 65 97 76取d1=5一趟分组:49 38 65 97 76 13 27 48 55 4取d2=3二趟分组:13 27 48 55 4 49 38 65 97 76v算法描述Ch8_3.c例49 38 65 97 76 13 27 48 55 4#define T 3int d=5,3,1;ji49133827一趟排序:13 27 48 55 4 49 38 65 97 76jiji274jiji

11、55ji38jijiji二趟排序:13 4 48 38 27 49 55 65 97 76jiji6548ji9755ji764v希尔排序特点l子序列的构成不是简单的“逐段分割”,而是将相隔某个增量的记录组成一个子序列l希尔排序可提高排序速度,因为u分组后n值减小,n更小,而T(n)=O(n),所以T(n)从总体上看是减小了u关键字较小的记录跳跃式前移,在进行最后一趟增量为1的插入排序时,序列已基本有序l增量序列取法u无除1以外的公因子u最后一个增量值必须为1l稳定性 不稳定归并将两个或两个以上的有序表组合成一个新的有序表,叫有序结点序列的合并算法描述:1.i=l,j=m+1,k=l2.当i=

12、m且j=n时若aiaj bk=bj,j+,k+3.若i=m 则bk=ai,i+,k+4.若j=n 则bk=bj,j+,k+3.5 合并排序(归并排序)两路合并排序v排序过程l设初始序列含有n个记录,则可看成n个有序的子序列,每个子序列长度为1l两两合并,得到n/2个长度为2或1的有序子序列l再两两合并,如此重复,直至得到一个长度为n的有序序列为止例初始关键字:49 38 65 97 76 13 27一趟归并后:38 49 65 97 13 76 27二趟归并后:38 49 65 97 13 27 76三趟归并后:13 27 38 49 65 76 97l算法描述v算法评价l时间复杂度:T(n)

13、=O(nlog2n)l空间复杂度:S(n)=O(n)l稳定性:稳定Ch8_9.cv基本思想:通过一趟排序,将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录进行排序,以达到整个序列有序。v排序过程:对alowup中记录进行一趟快速排序,附设两个指针i和j,设枢轴记录t=alowl初始时令i=low,j=upl首先从j所指位置向前搜索第一个关键字小于t的记录,并放在i位置上,i指针加1l再从i所指位置起向后搜索,找到第一个关键字大于t的记录,并放在j位置上,j指针加1l重复上述两步,直至i=j为止,将t放在i(j)上l再分别对两个子序列进行快

14、速排序,直到每个子序列只含有一个记录为止3.6 快速排序例初始关键字:49 38 65 97 76 13 27 50 ijtji 完成一趟排序:(27 38 13)49 (76 97 65 50)分别进行快速排序:(13)27 (38)49 (50 65)76 (97)快速排序结束:13 27 38 49 50 65 76 97ijijij65ji13ij97ij=492749算法描述void quick(int a,int low,int up)int i,j,t;if(lowup)i=low,j=up,t=alow;while(i!=j)while(it)j-;if(ij)ai+=aj;w

15、hile(ij&ai=t)i+if(ij)aj-=ai;ai=t;quick(a,low,i-1);quick(a,i+1,up);v算法评价l时间复杂度u最好情况(每次总是选到中间值作枢轴)T(n)=O(nlog2n)u最坏情况(每次总是选到最小或最大元素作枢轴)T(n)=O(n)l空间复杂度:需栈空间以实现递归u最坏情况:S(n)=O(n)u一般情况:S(n)=O(log2n)T(n)=O(n)多关键字排序v定义:例 对52张扑克牌按以下次序排序:23A23A23A23A两个关键字:花色()面值(23A)并且“花色”地位高于“面值”v多关键字排序方法l 最高位优先法(MSD):先对最高位关

16、键字k1(如花色)排序,将序列分成若干子序列,每个子序列有相同的k1值;然后让每个子序列对次关键字k2(如面值)排序,又分成若干更小的子序列;依次重复,直至就每个子序列对最低位关键字kd排序;最后将所有子序列依次连接在一起成为一个有序序列3.6 基数排序l最低位优先法(LSD):从最低位关键字kd起进行排序,然后再对高一位的关键字排序,依次重复,直至对最高位关键字k1排序后,便成为一个有序序列lMSD与LSD不同特点u按MSD排序,必须将序列逐层分割成若干子序列,然后对各子序列分别排序u按LSD排序,不必分成子序列,对每个关键字都是整个序列参加排序;并且可不通过关键字比较,而通过若干次分配与收

17、集实现排序链式基数排序v基数排序:借助“分配”和“收集”对单逻辑关键字进行排序的一种方法v链式基数排序:用链表作存储结构的基数排序v链式基数排序步骤l设置10个队列,fi和ei分别为第i个队列的头指针和尾指针l第一趟分配对最低位关键字(个位)进行,改变记录的指针值,将链表中记录分配至10个链队列中,每个队列记录的关键字的个位相同l第一趟收集是改变所有非空队列的队尾记录的指针域,令其指向下一个非空队列的队头记录,重新将10个队列链成一个链表l重复上述两步,进行第二趟、第三趟分配和收集,分别对十位、百位进行,最后得到一个有序序列例初始状态:27810906393058918450526900808

18、3109589269278063930083184505008e0e1e2e3e4e5e6e7e8e9f0f1f2f3f4f5f6f7f8f9一趟分配930063083184505278008109589269一趟收集:505008109930063269278083184589二趟收集:083184589063505269930e0e1e2e3e4e5e6e7e8e9f0f1f2f3f4f5f6f7f8f9二趟分配008109278930063083184505278008109589269一趟收集:008063083109184269278505589930三趟收集:10900818493

19、0e0e1e2e3e4e5e6e7e8e9f0f1f2f3f4f5f6f7f8f9三趟分配063083269278505589505008109930063269278083184589二趟收集:l算法描述v算法评价l时间复杂度:u分配:T(n)=O(n)u收集:T(n)=O(rd)T(n)=O(d(n+rd)其中:n记录数 d关键字数 rd关键字取值范围 l空间复杂度:S(n)=2rd个队列指针+n个指针域空间Ch8_10.c初始状态:127810906393058918450526900808302345678910f0=0 e0=0f1=0 e1=0f2=0 e2=0f3=0 e3=0f

20、4=0 e4=0f5=0 e5=0f6=0 e6=0f7=0 e7=0f8=0 e8=0f9=0 e9=011223344566778910493006308318450527800810958926903106719258f0=0 e0=0f1=0 e1=0f2=0 e2=0f3=0 e3=0f4=0 e4=0f5=0 e5=0f6=0 e6=0f7=0 e7=0f8=0 e8=0f9=0 e9=0134477 910493006308318450527800810958926903106719258一趟收集:31016258750500810993006326927808318458909243811065二趟收集:750500810993006326927808318458909243811065二趟收集:f0=0 e0=0f1=0 e1=0f2=0 e2=0f3=0 e3=0f4=0 e4=0f5=0 e5=0f6=0 e6=0f7=0 e7=0f8=0 e8=0f9=0 e9=04479287928900806308310918426927850558993003102681754三趟收集:311065排序算法比较算法算法时间复杂度时间复杂度空间复杂度空间复杂度最小最小最大最大稳定性稳定性

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(数据结构第3章内部排序课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|