内部排序.ppt
《内部排序.ppt》由会员分享,可在线阅读,更多相关《内部排序.ppt(44页珍藏版)》请在咨信网上搜索。
1、1第10章 内部排序o主要内容:主要内容:o排序的基本概念o插入排序o交换排序o选择排序o归并排序o各种排序方法的比较210.1 概述o1.基本概念o排序排序:将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列的过程叫排序。n设序列R1,R2,Rn,相应关键字序列为 K1,K2,Kn,所谓排序是指重新排列 R1,R2,Rn 为 Rp1,Rp2,Rpn,使得满足:Kp1Kp2 Kpn 或 Kp1Kp2 Kpno排序的稳定性排序的稳定性:假设Ki iKj,(1i in;1jn;i ij)且在排序前的序列中Ri i领先于Rj,如在排序后Ri i仍领先于Rj,则称所用的排序方法是稳定
2、稳定的,反之则称排序方法是不稳定不稳定的。32.排序的分类o待排序记录所在位置n内部排序:待排序记录存放在内存中n外部排序:排序过程中需对外存进行访问的排序内部排序适用于记录个数不很多的小文件;外部排序则适用于记录个数太多,不能一次将其全部放入内存的大文件o排序依据策略n插入排序:直接插入排序,折半插入排序,希尔排序n交换排序:冒泡排序,快速排序n选择排序:简单选择排序,堆排序n归并排序:2-路归并排序n基数排序 43.排序的基本操作o排序的基本操作:n比较操作:比较两个关键字的大小n改变指向记录的指针(逻辑关系)或将一个记录从一个位置移动到另一个位置54.数据的存储形式o待排记录一般有三种存
3、储形式n存放在一组地址连续的存储单元中,类似顺序表o实现排序必须借助移动记录n存放在静态链表中o实现排序只需修改指针n存放在一组地址连续的存储单元中,同时另设一个指示各个记录存储位置的地址向量o实现排序时修改地址向量中的地址,排序结束时统一调整记录的存储位置6顺序存储结构定义#define MAXSIZE 20 /顺序表的长度typedef int KeyType;/关键字类型为整数类型typedef struct KeyType key;/关键字项 InfoType otherinfo;/其它数据项RedType;/记录类型type struct RedType rMAXSIZE+1;/r0
4、空作为哨兵 int length;/顺序表长度SqList;/顺序表类型 75.算法复杂度分析o评价排序算法的标准:n执行时间n所需辅助空间n稳定性排序所需时间简单排序:T(n)=O(n2)先进的排序:T(n)=O(logn)基数排序:T(n)=O(d.n)o排序算法的时间开销n主要是关键字的比较次数和记录的移动次数。n有的排序算法其执行时间不仅依赖于问题的规模,还取决于输入实例中数据的状态。o排序算法的空间开销n若所需辅助空间不依赖于问题的规模n,即辅助空间为O(1),则称为就地排序就地排序。n非就地排序所要求的辅助空间一般为O(n)810.2 插入排序o1.插入排序的基本思想o基本思想:设
5、R=R1,R2,Rn为原始序列,R=初始为空。插入排序就是依次取出R中的元素Ri,然后将Ri有序地插入到R中。o例如:R=5,2,10,2 R=有序插入R=2,10,2R=5R=10,2 R=2,55R=2 2R=2,5,10R=10R=2,2,5,10292.直接插入排序o排序过程:整个排序过程为n-1趟插入n将序列中第1个记录看成是一个有序子序列n从第2个记录开始,逐个进行插入,直至整个序列有序R1R2RnR=R1R=R2,R3,Rn o若R1.i i-1为有序区,寻找Ri i插入位置的方法:n在R0处设置监视哨,即令:R0=Ri in从j=i i-1的记录位置开始依次向前比较n若Ri i
6、.keyRj.key,Rj后移,否则插入位置找到,将Ri i插入到第j+1个位置10算法程序viod Dinsertsort(Sqlist&L)for(i=2;i=L.length;+i)/对每一个RiR /小于时,需将L.ri插入到有序表 if LT(L.ri.key,L.ri-1.key)L.r0=L.ri;/复制为哨兵 /*寻找插入位置j*/for(j=i-1;LT(L.r0.key,L.rj.key);-j)L.rj+1=L.rj;/将ji-1的记录后移一格 L.rj+1=L.r0;/将Ri插入到位置j+1 11算法效率o时间复杂度n待排序记录按关键字从小到大排列(正序)比较次数:移动
7、次数:n待排序记录按关键字从大到小排列(逆序)比较次数:移动次数:n待排序记录随机,取平均值比较次数:移动次数:n总的时间复杂度:T(n)=O(n2)o空间复杂度:S(n)=O(1)123.折半插入排序o排序过程:用折半查找方法确定插入位置。o举例:i=1:(49)38 65 97 76 13 27 49(38)LMHHLMi=2:(38 49)65 97 76 13 27 49(65)LMHLMHMHLi=8:(13 27 38 49 49 65 76 97)H+1:插入位置H+1:插入位置13算法程序void BInsertSort(Sqlist&L)for(i=2;i=L.length;
8、+i)L.r0=L.ri;low=1;high=i-1;while(low=high)/折半查找位置 m=(low+high)/2;if(L.r0.key=high+1;-j)L.rj+1=L.rj;L.rhigh+1=L.r0;算法效率 时间复杂度(只改善了比较):T(n)=O(n2)空间复杂度:S(n)=O(1)折半插入排序是稳定的排序144.希尔排序o希尔排序(Shells Sort)又称“缩小增量排序”,基本思想为:把一个较长的待排序列分成若干段,n=n1+n2+nk;然后,分别对各段进行直接插入排序,使得整个序列基本有序;最后对整个序列进行一次直接插入排序。o希尔排序过程:先取一个正
9、整数间隔d1n,把所有相隔d1的记录放一组,组内进行直接插入排序;然后取d2ri i+1.key(i i=1,2,n),则交换(第一趟冒泡排序),结果关键字最大的记录被放在rn。n在n-1个记录中,若ri i.keyri i+1.key(i i=1,2,n-1),则交换,结果关键字次大的记录被安置在rn-1n以此类推,直到“在一趟排序过程中没有进行过交换记录的操作”为止r1r2r3rn-1rn第1趟冒泡排序第2趟冒泡排序第n-2趟冒泡排序第n-1趟冒泡排序19算法程序void Bubble_sort(Sqlist&L)for(i=L.length;i1;-i)exchange=false;/设
10、置开关 for(j=1;ji;+j)if GT(L.rj.key,L.rj+1.key)/一趟冒泡 L.rj L.rj+1;/移动3次 exchange=true;if(!exchange)exit;20性能分析o时间复杂度n最好情况(正序):比较1趟n-1次,不移动n总的时间复杂度:O(n2)o空间复杂度:S(n)=O(1)o冒泡排序是稳定的排序o比较次数:o移动次数:n最坏情况(逆序):212.快速排序o基本思想:选择一个枢轴,通过一趟排序,将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后分别对这两部分记录进行排序,以达到整个序列有序。o排序过程:n设
11、序列为r1,r2,rn,定r1为枢轴n设low,high指针分别从两端与枢轴比较,把比r1小的记录放前,比r1大的记录放后,得到一次划分:rs1,rs2,rsk,r r1,rt1,rt2,rtjn然后分别对两序列rs和rt再进行划分,直到划分后的序列剩一个元素为止,这是一个递归的过程22一趟分割过程o先从high所指记录向前搜索,找到第1个小于key的记录与枢轴交换。然后从low起向后搜索,找到第一个比key大的记录与low互换。重复上面两步,直到low=high为止(该位置即为枢轴的位置)4938659776132749初始关键字L1次交换之后2次交换之后3次交换之后4次交换之后完成一趟排序
12、HH2738659776134949HLLL2738499776136549LHH2738139776496549HLL2738134976976549LHHH2738134976976549THANK YOUSUCCESS2024/4/18 周四23可编辑24第1趟排序后2738134976976549快速排序整个过程初始关键字4938659776132749第2趟排序后1327384949657697第3趟排序后1327384949657697有序序列132738494965769749277649结束结束结束结束快速排序是不稳定的排序初始关键字3849659776132749有序序列13
13、2738494965769725int Partition(Sqlist&L,int low,int high)/以L.rlow为主记录,对子系列L.rlow.high的一趟划分 temp=L.rlow;while(lowhigh)/进行一趟划分 while(low=temp.key)-high;L.rlow=L.rhigh;while(lowhigh&L.rlow.key=temp.key)+low;L.rhigh=L.rlow;L.rlow=temp;/找到主记录的位置low return low;void Qsort(Sqlist&L,int low,int high)/递归算法实现 i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 内部 排序
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。