第9章-排序分析优秀PPT.ppt
《第9章-排序分析优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第9章-排序分析优秀PPT.ppt(77页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第九章 排 序19.1基本概念基本概念9.2插入排序插入排序9.3交换排序交换排序9.4选择排序选择排序本章书目本章书目 9.5归并排序归并排序9.6基数排序基数排序9.7各种内排序的比较各种内排序的比较小结与习题小结与习题29.1 9.1 基本概念基本概念排序排序1排序的分类排序的分类2内排序内排序33排序排序排序的定义排序的定义给定一个记录集合(给定一个记录集合(r1,r2,rn),),其相应的关键码分别为(其相应的关键码分别为(k1,k2,kn),),排序是将这些记录排成依次为排序是将这些记录排成依次为(rs1,rs2,rsn)的一个序列,使得相)的一个序列,使得相应的关键码满足应的关键
2、码满足ks1ks2ksn(非降(非降序或升序)或序或升序)或ks1ks2ksn(非升序(非升序或降序)。或降序)。4排序算法的稳定性排序算法的稳定性若对随意的数据元素序列,运用某个若对随意的数据元素序列,运用某个排序方法,对它按关键码进行排序排序方法,对它按关键码进行排序若相同关键码元素间若相同关键码元素间的位置关系,排序前的位置关系,排序前与排序后保持一样,与排序后保持一样,称此排序方法是稳定称此排序方法是稳定的;的;不能保持一样的排不能保持一样的排序方法则称为不稳序方法则称为不稳定的。定的。5排序的分类排序的分类依据参与排序的数据元素(记录)是否全部依据参与排序的数据元素(记录)是否全部放
3、置在内存中可把排序分为内排序和外排序。放置在内存中可把排序分为内排序和外排序。内排序:指待排序列完全存放在内存中所内排序:指待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列。进行的排序过程,适合不太大的元素序列。外排序:指排序过程中还需访问外存储器,外排序:指排序过程中还需访问外存储器,足够大的元素序列,因不能完全放入内存,足够大的元素序列,因不能完全放入内存,只能运用外排序。只能运用外排序。6排序的分类排序的分类依据排序所依据的关键码的个数可以依据排序所依据的关键码的个数可以把排序分为单键排序和多键排序。把排序分为单键排序和多键排序。单键排序:依据一个关键码进行的排单键排序:依
4、据一个关键码进行的排序。序。多键排序:依据多个关键码进行的排多键排序:依据多个关键码进行的排序。序。7排序的分类排序的分类依据排序的方法是否建立在关键码比较的基依据排序的方法是否建立在关键码比较的基础上可以把排序分为:础上可以把排序分为:基于比较:主要是通过关键码之间的比较和基于比较:主要是通过关键码之间的比较和记录的移动这两种操作来实现的排序。记录的移动这两种操作来实现的排序。不基于比较:依据待排序数据的特点所实行不基于比较:依据待排序数据的特点所实行的其它方法,通常是没有大量的关键码之间的其它方法,通常是没有大量的关键码之间的比较和记录的移动操作的排序。的比较和记录的移动操作的排序。8内排
5、序的方法内排序的方法内部排序的过程是一个内部排序的过程是一个逐步扩大逐步扩大记录的记录的有有序序列长度序序列长度的过程。的过程。经过一趟排序经过一趟排序有序序列区有序序列区无无 序序 序序 列列 区区有序序列区有序序列区无无 序序 序序 列列 区区9内排序的主要方法内排序的主要方法选择类选择类交换类交换类归并类归并类插入类插入类各种各种排序排序直接直接插入插入折半折半插入插入表表插入插入希尔希尔将无序子序列中的一个或几个将无序子序列中的一个或几个记录记录“插入插入”到有序序列中,到有序序列中,从而增加记录的有序子序列的从而增加记录的有序子序列的长度,最终完全排序工作。长度,最终完全排序工作。1
6、0内排序的主要方法内排序的主要方法选择类选择类交换类交换类归并类归并类插入类插入类各种各种排序排序冒泡排序冒泡排序快速排序快速排序通过通过“交换交换”无序序列中的记无序序列中的记录从而得到其中关键字最小或录从而得到其中关键字最小或最大的记录,并将它加入到有最大的记录,并将它加入到有序子序列中,以此方法增加记序子序列中,以此方法增加记录的有序子序列的长度。录的有序子序列的长度。11内排序的主要方法内排序的主要方法选择类选择类交换类交换类归并类归并类插入类插入类各种各种排序排序从记录的无序子序列中从记录的无序子序列中“选择选择”关键字关键字最小或最大最小或最大的记录,的记录,并将它并将它加入到有序
7、子序列加入到有序子序列中,中,以此方法增加记录的有序子序以此方法增加记录的有序子序列的长度。列的长度。简单简单选择选择树形树形选择选择堆排序堆排序12内排序的主要方法内排序的主要方法选择类选择类交换类交换类归并类归并类插入类插入类各种各种排序排序二路归并二路归并排序排序通过通过“归并归并”两个或两个以上两个或两个以上的记录有序子序列,逐步增加的记录有序子序列,逐步增加记录有序序列的长度。记录有序序列的长度。139.2 9.2 插入排序插入排序 直接插入排序直接插入排序1折半插入排序折半插入排序2表插入排序表插入排序3希尔排序希尔排序414算法思想算法思想仅有一个记录的表总是有序的,因此,仅有一
8、个记录的表总是有序的,因此,对于对于n个记录的表,可从其次个记录起个记录的表,可从其次个记录起先直到第先直到第n个记录,逐个向有序表中进个记录,逐个向有序表中进行插入操作,从而得到行插入操作,从而得到n个记录按关键个记录按关键码有序的表。码有序的表。干脆插入排序干脆插入排序15干脆插入排序干脆插入排序操作步骤:操作步骤:Step1:选取选取L.key1 作为初始的有序序列作为初始的有序序列,i=2;Step2:将将L.keyi插入到前面的有序序列中,使插入到前面的有序序列中,使 其有序序列长度增加其有序序列长度增加1;Step3:i=i+1,若,若i的值小于表长,则重复的值小于表长,则重复St
9、ep2,否则排序结束。否则排序结束。16干脆插入排序干脆插入排序算法分析:算法分析:空间效率:仅用了一个协助单元,空间效率:仅用了一个协助单元,O(1)。时间效率:时间效率:最好状况下:初始序列是依次的最好状况下:初始序列是依次的最坏状况下:初始序列是逆序的最坏状况下:初始序列是逆序的平均状况下:初始序列是无序的平均状况下:初始序列是无序的稳定性:是一种稳定的排序方法。稳定性:是一种稳定的排序方法。17干脆插入排序干脆插入排序总比较次数=n-1 最好最好最坏最坏平均平均总移动次数=2(n-1)18折半插入排序折半插入排序算法思想算法思想设在依次表中有一设在依次表中有一个对象序列个对象序列V0,
10、V1,Vn-1。其中。其中,V0,V1,Vi-1是已经排好序的对象。在插入是已经排好序的对象。在插入Vi时时,利用折半查找法找寻利用折半查找法找寻Vi的插的插入位置。入位置。19折半插入排序折半插入排序n操作步骤:操作步骤:nStep1:依次表中前依次表中前j-1个记录有序,将第个记录有序,将第j个个记录插入。记录插入。n令令low=1;high=j-1;r0=rj;nStep2:若若lowhigh,得到插入位置,转,得到插入位置,转Step5;nStep3:若若lowhigh,则取有序子表的中点,则取有序子表的中点nm=(low+high)/2;nStep4:若若r0.keyr0.next;
11、将;将i指向指向第一个记录位置;第一个记录位置;Step2:若若i=l-length时,调整结束;否则时,调整结束;否则:2.1若若i=j,j=l-rj.next;数据元素应在这重量中,不用调整处理下;数据元素应在这重量中,不用调整处理下一个结点:一个结点:i+;转;转Step2;2.2若若ji,则,则l-ri.eleml-rj.elem;保存下一个结点地址:;保存下一个结点地址:p=l-rj.next;同时保持后续链表不被中断:;同时保持后续链表不被中断:l-rj.next=l-i.next;l-i.next=j;指向下一个处理的结点:;指向下一个处理的结点:j=p;i+;转;转Step2;
12、2.3若若ji,j重量中原记录已移走,沿重量中原记录已移走,沿j的指针域找寻原记录的位置:的指针域找寻原记录的位置:while(jrj.next;转到;转到2.1。24表插入排序表插入排序举例说明举例说明Play25表插入排序表插入排序算法分析:算法分析:时间困难度:设有序表长度为时间困难度:设有序表长度为i,则须要比较,则须要比较至多至多i+1次,修改指针两次。因此,总比较次次,修改指针两次。因此,总比较次数与干脆插入排序相同,修改指针总次数为数与干脆插入排序相同,修改指针总次数为2n次。所以,时间困难度仍为次。所以,时间困难度仍为O(n2)。空间困难度:表插入排序的空间困难度为空间困难度:
13、表插入排序的空间困难度为O(1)。稳定性:表插入排序是一种稳定的排序方法。稳定性:表插入排序是一种稳定的排序方法。26希尔排序希尔排序算法思想算法思想先将整个待排记录分割成若干个子先将整个待排记录分割成若干个子序列,在子序列中分别进行干脆插序列,在子序列中分别进行干脆插入排序,待整个序列基本有序的时入排序,待整个序列基本有序的时候,再对全体序列进行一次干脆插候,再对全体序列进行一次干脆插入排序。入排序。27希尔排序希尔排序操作步骤:操作步骤:Step1:选择一个步长序列选择一个步长序列t1,t2,tk,其,其中中 titj,tk=1;Step2:按步长序列个数按步长序列个数k,对序列进行,对序
14、列进行k趟排序;趟排序;Step3:每趟排序,依据对应的步长每趟排序,依据对应的步长ti,将待排,将待排序列分割序列分割 成若干长度为成若干长度为m的子序列,分别对各子的子序列,分别对各子表进行直表进行直 接插入排序。仅步长因子为接插入排序。仅步长因子为1时,整个时,整个序列作为序列作为 一个表来处理,表长度即为整个序列的一个表来处理,表长度即为整个序列的长度。长度。28希尔排序希尔排序举例说明:举例说明:Play29希尔排序希尔排序算法分析:算法分析:时间困难度:由于希尔排序是依靠于增量的时间困难度:由于希尔排序是依靠于增量的选取,它的时间困难度是在选取,它的时间困难度是在O(nlog2n)
15、O(n2)之间。之间。空间困难度:在希尔排序的过程中只须要一空间困难度:在希尔排序的过程中只须要一个协助空间用于暂存当前待插入的记录,因个协助空间用于暂存当前待插入的记录,因此,希尔排序的空间困难度为此,希尔排序的空间困难度为O(1)。稳定性:希尔排序方法是一种不稳定的排序稳定性:希尔排序方法是一种不稳定的排序方法。方法。309.3 9.3 交换排序交换排序冒泡排序冒泡排序1快速排序快速排序231冒泡排序冒泡排序假设在排序过程中,记录序列假设在排序过程中,记录序列R1.n的状态为:的状态为:第第 i 趟冒泡排序趟冒泡排序无序序列无序序列R1.n-i+1有序序列有序序列 Rn-i+2.nn-i+
16、1无序序列无序序列R1.n-i有序序列有序序列 Rn-i+1.n比较相邻记录,将关比较相邻记录,将关键字最大的记录键字最大的记录交换交换到到 n-i+1 的位置上的位置上32冒泡排序冒泡排序算法思想算法思想对对n个记录的表,第一趟冒泡得到一个记录的表,第一趟冒泡得到一个关键码最大的记录个关键码最大的记录rn,其次趟冒,其次趟冒泡对泡对n-1个记录的表,再得到一个关个记录的表,再得到一个关键码最大的记录键码最大的记录rn-1,如此重复,如此重复,直到直到n个记录按关键码有序的表。个记录按关键码有序的表。33冒泡排序冒泡排序一趟冒泡方法:一趟冒泡方法:Step1:i=1;/设置从第一个记录起先进设
17、置从第一个记录起先进行两两比较行两两比较Step2:若若ij,一趟冒泡结束。,一趟冒泡结束。Step3:比较比较ri.key与与ri+1.key,若,若ri.keyri+1.key,不交换,转,不交换,转Step5;Step4:当当ri.keyri+1.key时,时,r0=ri;ri=ri+1;ri+1=r0;/将将ri与与ri+1交换交换Step5:i=i+1;对下两个记录进行两两比较,;对下两个记录进行两两比较,转转Step2;34冒泡排序冒泡排序操作步骤:操作步骤:Step1:从从n记录的表尾起先,记录的表尾起先,j=n;Step2:若若jri+1.key时,时,将将ri与与ri+1交换
18、交换;Step7:i=i+1;调整对下两个记录进行两两比较,调整对下两个记录进行两两比较,转转Step4;36冒泡排序冒泡排序语言描述语言描述:templatevoidBubbleSort(SqList&L)for(inti=1;iL.length;i+)/用用i限制比限制比较趟数共较趟数共n-1趟趟typet;/协助变量,作交协助变量,作交换用换用for(intj=1;jL.keyj+1)t=L.keyj;L.keyj=L.keyj+1;L.keyj+1=t;/交换交换L.keyj和和L.keyj+1的值的值37冒泡排序冒泡排序算法分析:算法分析:空间困难度:冒泡排序的空间困难度为空间困难度
19、:冒泡排序的空间困难度为O(1)。时间困难度:总共要进行时间困难度:总共要进行n-1趟冒泡,对趟冒泡,对j个个记录的表进行一趟冒泡须要记录的表进行一趟冒泡须要j-1次关键码比较。次关键码比较。冒泡排序的时间困难度为冒泡排序的时间困难度为O(n2)。稳定性:冒泡排序是一种稳定的排序方法。稳定性:冒泡排序是一种稳定的排序方法。38快速排序快速排序算法思想:算法思想:找一个记录,以它的关键字作为找一个记录,以它的关键字作为“枢轴枢轴”,凡其,凡其关键字关键字小于枢轴小于枢轴的记录均移动至该的记录均移动至该记录之前记录之前,反,反之,凡关键字之,凡关键字大于枢轴大于枢轴的记录均移动至该的记录均移动至该
20、记录之记录之后后。致使一趟排序之后,记录的无序序列。致使一趟排序之后,记录的无序序列Rs.t将分割成两部分:将分割成两部分:Rs.i-1和和Ri+1.t,且,且 Rj.key Ri.key Rj.key (sji-1)枢轴枢轴 (i+1jt)。39快速排序快速排序示例示例stlowhigh设设 Rs=52 为枢轴为枢轴high23low80high14low52R052lowhighhighhighlow40快速排序快速排序操作步骤:操作步骤:Step1:假如待排子序列中元素的个数大于假如待排子序列中元素的个数大于1,则以,则以L.rlow作为枢轴,进行一次划分;作为枢轴,进行一次划分;否则排
21、序结束。否则排序结束。Step2:对枢轴左半子序列重复对枢轴左半子序列重复Step1;Step3:对枢轴右半子序列重复对枢轴右半子序列重复Step1;41快速排序快速排序算法分析:算法分析:空间困难度:快速排序是递归的,递归调用空间困难度:快速排序是递归的,递归调用层次数与其二叉树的深度一样。因而,存储层次数与其二叉树的深度一样。因而,存储开销在志向状况下为开销在志向状况下为O(log2n);在最坏状况;在最坏状况下,为下,为O(n)。时间困难度:最好状况下为时间困难度:最好状况下为O(nlog2n),最,最坏状况,快速排序蜕化为冒泡排序。坏状况,快速排序蜕化为冒泡排序。稳定性:快速排序是一个
22、不稳定的排序方法。稳定性:快速排序是一个不稳定的排序方法。429.4 9.4 选择排序选择排序简单选择排序简单选择排序1树形选择排序树形选择排序2堆排序堆排序343简洁选择排序简洁选择排序假设排序过程中,待排记录序列的状态为:假设排序过程中,待排记录序列的状态为:有序序列R1.i-1无序序列 Ri.n 第第 i 趟趟简洁选择排序简洁选择排序从中选出关键字最小的记录有序序列R1.i无序序列 Ri+1.n44简洁选择排序简洁选择排序算法思想算法思想:第一趟,从第一趟,从n个记录中找出关键码最小个记录中找出关键码最小的记录与第一个记录交换;其次趟,的记录与第一个记录交换;其次趟,从其次个记录起先的从
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 排序 分析 优秀 PPT
限制150内