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

    各种排序算法分析.ppt

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

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

    各种排序算法分析.ppt

    1,排序算法及算法分析,2,问题的提出:,为什么要排序?有序表的优点?缺点?构造关系。按照什么原则排序?比较?如何进行排序?,3,基本概念,排序(Sorting):简单地说,排序就是把一组记录按照某个(或某几个)字段的值以递增(由小到大)或递减(由大到小)的次序重新排列的过程。(如按年龄从小到大排序),4,作为比较基础的一个(或多个)字段,称为排序码。排序码可以是数值、符号或符号串。排序码不一定是关键码,关键码可以作为排序码。关键码是唯一的,但排序码不一定唯一。排序码不唯一时,排序的结果可能不唯一。参与排序的对象,称为记录。一个记录可以包含多个字段。如果记录集合中存在多个排序码相同的记录,经过排序后,排序码相同的记录的前后次序保持不变,则这种排序方法称为是稳定的,否则是不稳定的。,排序码 与 关键码(primary key),5,排序方法可以分为五种插入排序、选择排序、交换排序、分配排序和归并排序。在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。本章侧重讨论内排序的方法,但有些方法(特别是归并排序的思想)也可以用于外排序。,排序的类型,6,排序算法的评价,评价排序算法好坏的标准执行算法所需的时间执行算法所需要的附加空间算法本身的复杂程度也是考虑的一个因素排序的时间开销是算法好坏的最重要的标志排序的时间开销衡量标准:算法执行中的比较次数(必须)。算法执行中的移动次数(有可能避免)。通常会关注最坏情况和平均情况的开销。,7,插入排序,基本思想:每步将一个待排序的记录,按其排序码大小插到前面已经排序的字序列的合适位置,直到全部插入排序完为止。,x,顺次选取一个元素,插入到合适位置,8,插入排序的细分类,如何插入到已排好序的序列中?直接插入(从后向前找位置后插入)O(n2)二分法插入(按二分法找位置后插入)O(nlog2n)表插入排序(按链表查找位置后插入)O(n2),9,直接插入排序,基本思想:假定前面m 个元素已经排序;取第(m+1)个元素,插入到前面的适当位置;一直重复,到m=n 为止。(初始情况下,m=1),10,第一趟:23,起始只有一个记录 11,23 11 第二趟:11,23,11,23,55 55 第三趟:11,23,55,11,23,55,97 97 第四趟:11,23,55,97,11,19,23,55,97 19 第五趟:11,19,23,55,97,11,19,23,55,80,97 80,示例:23,11,55,97,19,80,11,直接插入排序的算法中记录的数据结构,typedef int KeyType;typedef int DataType;typedef struct KeyType key;/*排序码字段*/DataType info;/*记录的其他字段*/RecordNode;typedef struct int n;/*n为文件中的记录个数,nMAXNUM*/RecordNode*record;SortObject;,12,直接插入排序算法复杂度评价,极端情况下:最小比较次数每个记录仅比较一次最大比较次数每个记录比较已排好序的记录长度,13,直接插入排序算法评价2,最小移动次数 最大移动次数,14,直接插入排序算法评价3,初始数据状态相关:文件初态不同时,直接插入排序所耗费的时间有很大差异。若文件初态为正序,则算法的时间复杂度为O(n)若初态为反序,则时间复杂度为O(n2),15,直接插入排序算法评价4 平均复杂度,插入记录Ri-1,有i种可能的插入位置,即插入到第0,1,i-1位置上,假设每种情况发生的概率是相等的,均为 pj=1/i(j=0,1,i-1)比较次数为Cj=j+1(j=0,i-2,i-2),则插入记录Ri-1的平均比较次数为,16,直接插入排序算法评价5 平均复杂度,直接插入排序的 总的比较次数为:,17,直接插入排序算法评价,直接插入排序算法的平均移动次数与平均比较次数同级,也是O(n2)直接插入排序的平均时间复杂度为T(n)=O(n2)算法中引入了一个附加的记录空间temp,因此辅助空间为S(n)=O(1)直接插入排序是稳定的,18,存储结构与算法优化,顺序存储结构:二分插入算法,减少比较次数。链式存储结构:减少移动次数。,19,二分法插入排序,特点:在直接插入排序的基础上减少比较的次数,即在插入Ri时改用二分法比较找插入位置,便得到二分法插入排序限制:必须采用顺序存储方式。,20,(highlow,查找结束,插入位置为low 或high+1),(4236),(4253),21,二分法插入排序算法,void binSort(SortObject*pvector)int i,j,left,mid,right;RecordNode temp;for(i=1;i n;i+)temp=pvector-recordi;left=0;right=i 1;while(left recordmid.key)right=mid-1;,else left=mid+1;/while for(j=i-1;j=left;j-)pvector-recordj+1=pvector-recordj;if(left!=i)pvector-recordleft=temp;/for/binSort,22,二分插入排序比较次数,二分插入排序的比较次数与待排序记录的初始状态无关,仅依赖于记录的个数,插入第i个记录时,如果,则无论排序码的大小,都恰好经过 次比较才能确定插入位置,如果,则比较次数为j+1,因此,将n(n=2k)个记录排序的总比较次数为,23,二分法插入排序方法性能分析,当n较大时,比直接插入排序的最大比较次数少得多。但大于直接插入排序的最小比较次数算法的移动次数与直接插入排序算法的相同最坏的情况为n2/2最好的情况为n平均移动次数为O(n2)二分法插入排序算法的平均时间复杂度为T(n)=O(n2)二分插入排序法是稳定的排序算法,在检索时采用leftright结束,left、right的修改原则是:temp.key recordmid.key,保证排序是稳定的。,24,结论,移动次数与直接插入排序相同,最坏的情况为n2/2,最好的情况为n,平均移动次数为O(n2)二分法插入排序算法的平均时间复杂度为 T(n)=O(n2)二分法插入排序是稳定的,25,表插入排序,表插入排序是在直接插入排序的基础上减少移动的次数。基本思想:在记录中设置一个指针字段,记录用链表连接插入记录Ri时,记录R0至Ri-1已经排序,先将记录Ri脱链再采用顺序比较的方法找到Ri应插入的位置,将Ri插入链表。,26,struct Node;/*单链表结点类型*/typedef struct Node ListNode;struct Node KeyType key;/*排序码字段*/DataType info;/*记录的其它字段*/ListNode*next;/*记录的指针字段*/;typedef ListNode*LinkList;,表插入算法中记录的数据结构,27,表插入排序的算法性能分析,第i趟排序:最多比较次数i次,最少比较次数1次。n-1趟总的比较次数:最多:最少:n-1 记录移动次数:0 时间效率:O(n2)辅助空间:O(n)指针 稳定性:p-key key保证稳定的排序。,28,选择排序,思想:每趟从待排序的记录序列中选择关键字最小的记录放置到已排序表的最前位置,直到全部排完。关键问题:在剩余的待排序记录序列中找到最小关键码记录。方法:直接选择排序堆排序。,29,直接选择排序,方法是首先在所有记录中选出排序码最小的记录,与第一个记录交换然后在其余的记录中再选出排序码最小的记录与第二个记录交换以此类推,直到所有记录排好序,30,直接选择排序性能分析,选择排序的比较次数与记录的初始状态无关。第i趟排序:从第i个记录开始,顺序比较选择最小关键码记录需要n-i次比较。总的比较次数:移动次数:Mmin=0(初始为正序时)最多移动次数:Mmax=3(n-1)(初始为逆序时,每趟1次交换,3次移动完成)时间复杂度:T(n)=O(n2),辅助空间1个记录单位:Temp,稳定性:不稳定的排序。,31,31,起泡排序,方法先将序列中的第一个记录R0与第二个记录R1比较,若前者大于后者,则两个记录交换位置,否则不交换然后对新的第二个记录R1与第三个记录R2作同样的处理依次类推,直到处理完第n-1个记录和第n个记录从(R0,R1)到(Rn-2,Rn-1)的n-1次比较和交换过程称为一次起泡经过这次起泡,n个记录中最大者被安置在第n个位置上,32,32,此后,再对前n-1个记录进行同样处理,使n-1个记录的最大者被安置在整个序列的第n-1个位置上。然后再对前n-2个记录重复上述过程,这样最多做n-1次起泡就能完成排序可以设置一个标志noswap表示本次起泡是否有记录交换,如果没有交换则表示整个排序过程完成起泡排序是通过相邻记录之间的比较与交换,使值较大的记录逐步从前(上)向后(下)移,值较小的记录逐步从后(下)向前(上)移,就像水底的气泡一样向上冒,故称为起泡排序,起泡排序方法,33,若文件初状为正序,则一趟起泡就可完成排序,排序码的比较次数为n-1,且没有记录移动,时间复杂度是O(n)若文件初态为逆序,则需要n-1趟起泡,每趟进行n-i次排序码的比较,且每次比较都移动三次,比较和移动次数均达到最大值,起泡排序的算法评价,34,起泡排序的算法评价(续),起泡排序最好时间复杂度是O(n)起泡排序最坏时间复杂度为O(n2)起泡排序平均时间复杂度为O(n2)起泡排序算法中增加一个辅助空间temp,辅助空间为S(n)=O(1)起泡排序是稳定的,35,归并排序(merge sort),归并排序的基本操作是将两个或两个以上的记录有序序列归并为一个有序序列。最简单的情况是:只含一个记录的序列显然是个有序序列,经过逐趟归并使整个序列中的有序子序列的长度逐趟增大,直至整个记录序列为有序序列止。,36,归并排序(merge sort),Divide and Conquer,37,Merge Sort,Split Set into Two,38,Merge Sort,Merge two sorted lists into one,39,40,二路归并算法的基本思路:,两组归并算法merge:按low,m,high归并两组记录。结果放于low,high之间。void merge(RecordNode*r,RecordNode*r1,int low,int m,int high)一趟归并算法mergePass:两两归并长度为length的一组记录:void mergePass(RecordNode*r,RecordNode*r1,int n,int length),41,具有n个记录的文件排序,必须做log2n 趟归并,每趟归并所花费的时间是O(n)二路归并排序算法的时间复杂度为T(n)=O(nlog2n)算法中增加了一个数组record,算法的辅助空间为S(n)=O(n)二路归并排序是稳定的,算法评价,42,Quicksort,43,Quicksort(cont.),Divide:Partition(rearrange)the array Ap r into two subarrays Ap q-1 and Aq+1 r such that:each element of Ap q-1 AqConquer:Sort the two subarrays Ap q-1 and Aq+1 r by recursive calls to quicksort.Combine:Since the subarrays are sorted in place,no work is needed to combine them:the entire array Ap r is now sorted.,44,Quicksort(cont.),O(n),?,45,分配排序,分配排序是一种借助多关键码排序思想对单关键码排序的方法,46,例子扑克牌排序要求:每张扑克牌具有两个属性花色(梅花方块红心黑桃)和面值(2310JQKA),且花色的地位高于面值,排序后为梅花2,梅花A,方块2,方块A,红心2,红心A,黑桃2,黑桃A,分配排序例子,47,扑克牌排序方法,排序有以下两种方法第一是先将牌按花色分成4堆,然后将每堆按面值从小到大排序,最后按花色从小到大迭在一起第二种是先将牌按面值大小分成13堆,然后从小到大把它们收集起来,再按花色分成4堆,最后顺序地收集起来,48,对多关键码有序,一般情况下,假设文件F有n个记录F=(R0,R1,Rn-1)且每个记录Ri中含有d个关键码(ki0,ki1,kid-1),则文件对关键码(k0,k1,kd-1)有序是指文件中任意两个记录Ri和Rj(0ijn-1)满足词典次序有序关系(ki0,ki1,kid-1)(kj0,kj1,kjd-1)其中k0称为最高位关键码,kd-1称为最低位关键码,49,高位优先法:先对最高位关键码k0排序,将文件分成若干堆每堆中的记录都具有相同的k0然后分别就每堆对关键码k1排序,分成若干子堆,如此重复,直到对kd-1排序最后将各堆按次序叠在一起成为一个有序文件低位优先法:从最低位关键码kd-1起排序然后再对高一位关键码kd-2排序如此重复,直到对K0排序后便成为一个有序文件,多关键码排序算法,50,低位优先法比高位优先法简单,高位优先排序必须将文件逐层分割成若干子文件,然后各子文件独立排序低位优先排序不必分成子堆,对每个关键码都是整个文件参加排序,且可通过若干次“分配”和“收集”实现排序基数排序就是用低位优先法对单逻辑关键码排序的一种方法,分配排序算法,51,方法:把每个排序码看成是一个d元组Ki=(Ki0,Ki1,Kid-1)其中每个Ki都是集合C0,C1,Cr-1(C0C1Cr-1)中的值即C0KijCr-1(0in-1,0jd-1)其中r称为基数排序时先按Kid-1从小到大将记录分配到r个堆中然后依次收集,再按Kid-2分配到r个堆中如此反复,直到对Ki0分配、收集,得到的便是排好序的序列,基数排序,52,基数排序方法(续),基数排序时,为了实现记录的分配和收集,可以设r个队列,排序前为空队列,分配时将记录插入到各自的队列中,收集时将队列中的记录排在一起。,53,初始序列为36,5,16,98,95,47,32,36,48,10,请用基数排序法排序。(1)初始状态 36 5 16 98 95 47 32 36 48 10,例题,54,54,例题(续),(2)第一趟分配后,55,(3)第一趟收集后 10 32 5 95 36 16 36 47 98 48(4)第二趟分配后,例题(续),56,例题(续),57,(5)第二趟收集后 5 10 16 32 36 36 47 48 95 98,例题(续),58,基数排序算法中,没有排序码的比较和记录的移动,只是对链表的扫描和指针的赋值,所以,时间耗费主要在修改指针上每趟排序中,清队列的时间为O(r),将n个记录分配到队列的时间为O(n),收集的时间为O(r),因此,一趟排序的时间为O(r+n)总共要进行d趟排序,基数排序的时间复杂度是T(n)=O(d*(r+n)当n较大、d较小,特别是记录的信息量较大时,基数排序非常有效,基数排序算法评价,59,基数排序中,每个记录中增加了一个next字段,还增加了一个queue数组,故辅助空间为S(n)=O(n+r)基数排序是稳定的,基数排序算法评价(续),60,Counting sort(8.2),61,COUNTING-SORT(A,B,k),1(for i 0 to k)do Ci 0/initialize Ci2(for j 1 to lengthA)do CAj CAj+1/Ci now contains the number of elements equal to i.3(for i 1 to k)do Ci Ci+Ci-1/Ci now contains the number of elements less than or equal to i.4(for j lengthA downto 1)do BCAj Aj;/CAj store the rank of Aj CAj CAj-1;,62,Example of counting sort,63,33,3,64,65,各种排序方法的比较,排序算法之间的比较主要考虑以下几个方面算法的时间复杂度算法的辅助空间排序的稳定性算法结构的复杂性参加排序的数据的规模排序码的初始状态各种排序算法的时间复杂度与辅助空间及算法的稳定性如下表所示,66,算法评价-2,当数据规模n较小时,n2和nlog2n的差别不大,则采用简单的排序方法比较合适如直接插入排序或直接选择排序等由于直接插入排序法所需记录的移动较多,当对空间的要求不多时,可以采用表插入排序法减少记录的移动当文件的初态已基本有序时,可选择简单的排序方法如直接插入排序或起泡排序等,67,算法评价-3,当数据规模n较大时,应选用速度快的排序算法快速排序法最快,被认为是目前基于比较的排序方法中最好的方法当待排序的记录是随机分布时,快速排序的平均时间最短。但快速排序有可能出现最坏情况,则快速排序算法的时间复杂度为O(n2),且递归深度为n,即所需栈空间为O(n),

    注意事项

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

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开