常用排序算法精选PPT.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《常用排序算法精选PPT.ppt》由会员分享,可在线阅读,更多相关《常用排序算法精选PPT.ppt(56页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、常用排序算法第1页,此课件共56页哦内部排序内部排序:指的是待排序记录存放在计算机指的是待排序记录存放在计算机随机存储器随机存储器中中进行的排序过程。进行的排序过程。外部排序外部排序:指的是待排序记录的数量很大,以致内存一次不能容指的是待排序记录的数量很大,以致内存一次不能容纳全部记录,在排序过程中尚需对纳全部记录,在排序过程中尚需对外存外存进行访问的排序过程。进行访问的排序过程。内部排序与外部排序内部排序与外部排序第2页,此课件共56页哦假设假设 Ki=Kj,且排序前序列中,且排序前序列中 Ri 领先于领先于 Rj;若在排序后的序列中若在排序后的序列中 Ri 仍领先于仍领先于 Rj,则称排序
2、方法是,则称排序方法是稳定的稳定的。若在排序后的序列中若在排序后的序列中 Rj 仍领先于仍领先于 Ri,则称排序方法是,则称排序方法是不稳定不稳定的的。例,序列例,序列 3 15 8 8 6 9若排序后得若排序后得 3 6 8 8 9 15稳定的稳定的若排序后得若排序后得 3 6 8 8 9 15不稳定的不稳定的排序衡量指标排序衡量指标稳定性稳定性第3页,此课件共56页哦排序衡量指标排序衡量指标时间复杂度时间复杂度排序过程主要是对记录的排序码进行比较和记录的移动过程。排序的时间复杂性可以算法执行中的数据比较次数及数据移动次数来衡量。当一种排序方法使排序过程在最坏或平均情况下所进行的比较和移动次
3、数越少,则认为该方法的时间复杂性就越好,分析一种排序方法,不仅要分析它的时间复杂性,而且要分析它的空间复杂性、稳定性等。第4页,此课件共56页哦按照排序过程中所依据的原则的不同可以分类为按照排序过程中所依据的原则的不同可以分类为:插入排序插入排序 交换排序交换排序(快速排序快速排序)选择排序选择排序 归并排序归并排序 基数排序基数排序 二叉排序树排序二叉排序树排序内部排序内部排序第5页,此课件共56页哦思想思想:利用有序表的插入操作进行排序利用有序表的插入操作进行排序有序表的插入有序表的插入:将一个记录插入到已排好序的有序表中,将一个记录插入到已排好序的有序表中,从而得到一个新的有序表。从而得
4、到一个新的有序表。例,序列例,序列 13 27 38 65 76 97 插入插入 4913 27 38 49 65 76 97插入排序插入排序直接插入排序直接插入排序第6页,此课件共56页哦直接插入排序直接插入排序算法描述算法描述例,序列例,序列 49 38 65 97 76 13 27 初始,初始,S=49 ;38 49 初始,令第初始,令第 1 个元素作为初始有序表;个元素作为初始有序表;依次插入第依次插入第 2,3,k 个元素构造新的有序表;个元素构造新的有序表;直至最后一个元素;直至最后一个元素;38 49 65 38 49 65 97 38 49 65 76 97 13 38 49
5、65 76 97 13 27 38 49 65 76 97 直接插入排序算法主要应用直接插入排序算法主要应用比较比较和和移动移动两种操作。两种操作。第7页,此课件共56页哦void Insert(ArrNode*pnum)for(i=1;i 0&tmp.key pnumj-1.key;j-)pnumj=pnumj-1;pnumj=tmp;直接插入排序直接插入排序算法描述算法描述第8页,此课件共56页哦时间复杂度分析:外层循环要进行n-1次插入,每次插入最少比较一次(正序),移动两次;最多比较i次,移动i2次(逆序)(i=1,2,n-1)。Cmin=n-1 M min=2(n-1)Cmax=1+
6、2+n-1=(n2-n)/2 M max=3+4+n+1=(n2+3n-4)/2Cave=(n2+n-2)/4 M max=(n2+7n-8)/4因此,直接插入排序的时间复杂度为O(n2)。)。直接插入算法的元素移动是顺序的,该方法是稳定的。直接插入排序的效率分析直接插入排序的效率分析第9页,此课件共56页哦由于直接插入排序算法利用了有序表的插入操作,故由于直接插入排序算法利用了有序表的插入操作,故顺序查找顺序查找操作可以替换为操作可以替换为折半查找折半查找操作。操作。例,序列例,序列 49 38 65 97 76 13 27 设已形成有序表设已形成有序表 38 49 65 97 76 插入元
7、素插入元素 13折半插入排序折半插入排序第10页,此课件共56页哦void BinaryInsertSort(ArrNode*pnum,int L)for(int i=1;iL;i+)/共进行共进行n-1次插入次插入 int left=0,right=i-1;temp=pnumi;while(left=right)int middle=(left+right)/2;/取中点取中点 if(temp=left;j-)pnumj+1=pnumj;/元素后移空出插入位元素后移空出插入位 pnumleft=temp;折半插入排序折半插入排序算法描述算法描述第11页,此课件共56页哦折半插入效率分析折半插
8、入效率分析折半插入效率分析折半插入效率分析二分插入算法与直接插入算法相比,需要辅助空间与直接插入排序基本一致;时间上,前者的比较次数比直接插入查找的最坏情况好,最好的情况坏,两种方法的元素的移动次数相同,因此二分插入排序的时间复杂度仍为O(n2)。二分插入算法与直接插入算法的元素移动一样是顺序的,因此该方法也是稳定的。第12页,此课件共56页哦直接插入排序直接插入排序1.若待排序记录序列按关键字若待排序记录序列按关键字基本有序基本有序,则排序效率可,则排序效率可大大提高;大大提高;2.待排序记录总数越少,排序效率越高;待排序记录总数越少,排序效率越高;希尔希尔(shell)排序排序第13页,此
9、课件共56页哦将待排序记录序列分割成为若干子序列分别进行直接插入排序;将待排序记录序列分割成为若干子序列分别进行直接插入排序;待整个序列中的记录基本有序后,再全体进行一次直接插入排序。待整个序列中的记录基本有序后,再全体进行一次直接插入排序。例,序列例,序列 49 38 65 97 76 13 27 48 55 4 19 第一趟排序第一趟排序49 13 1938 2765 4897 5576 413 19 4927 3848 6555 974 76希尔希尔(shell)排序排序算法思想算法思想第14页,此课件共56页哦第二趟排序第二趟排序13 19 4927 3848 6555 974 761
10、3 55 38 7627 4 65 4948 19 9713 38 55 764 27 49 6519 48 97第三趟排序第三趟排序4 13 19 27 38 48 49 55 65 76 97第15页,此课件共56页哦void Hill(ArrNode*pnum,int increment)/初始值为初始值为Lens printf(nThe Hill Sort list is n);for(h=increment;h 0;h=h/2)for(j=h;j=0&t.key pnumk.key);k=k-h)*(pnum+k+h)=*(pnum+k);*(pnum+k+h)=t;希尔希尔(she
11、ll)排序排序算法思想算法思想第16页,此课件共56页哦希尔排序效率分析希尔排序效率分析希尔排序的时间复杂性在O(nlog2n)和O(n2)之间,大致为O(n1.3)。)。第17页,此课件共56页哦思想思想:通过不断比较相邻元素大小,进行交换来实现排序。通过不断比较相邻元素大小,进行交换来实现排序。首先将第一个元素与第二个元素比较大小,若为逆序,则交换;首先将第一个元素与第二个元素比较大小,若为逆序,则交换;然后比较第二个元素与第三个元素的大小,若为逆序,则交换;然后比较第二个元素与第三个元素的大小,若为逆序,则交换;.直至比较第直至比较第 n-1 个元素与第个元素与第 n 个元素的大小,若为
12、逆序,则交换;个元素的大小,若为逆序,则交换;第一趟排序第一趟排序:结果结果:关键字最大关键字最大的记录被交换至的记录被交换至最后最后一个元素位置上。一个元素位置上。交换排序交换排序冒泡排序冒泡排序第18页,此课件共56页哦例,序列例,序列 49 38 76 13 2749 38 76 13 2738 49 13 27 38 4913 7627 76初初始始第第一一趟趟排排序序后后最大值最大值13 4927 49次大值次大值第第二二趟趟排排序序后后38 13 2713 2713 38 27 38第第三三趟趟排排序序后后第第四四趟趟排排序序后后第19页,此课件共56页哦void Bubble(A
13、rrNode*pnum)for(i=0;i i;j-)if(pnumj-1.key pnumj.key)tmp=pnumj;pnumj=pnumj-1;pnumj-1=tmp;冒泡排序的算法实现冒泡排序的算法实现第20页,此课件共56页哦从冒泡排序的算法可以看出,若待排序的元素为正序,则只需进行一趟排序,比较次数为(n-1)次,移动元素次数为0;若待排序的元素为逆序,则需进行n-1趟排序,比较次数为(n2-n)/2,移动次数为3(n2-n)/2,因此冒泡排序算法的时间复杂度为O(n2)。由于其中的元素移动较多,所以属于内排序中速度较慢的一种。因为冒泡排序算法只进行元素间的顺序移动,所以是一个稳
14、定的算法。冒泡排序的效率分析冒泡排序的效率分析第21页,此课件共56页哦冒泡排序的一种改进算法。冒泡排序的一种改进算法。思想思想:以以首记录首记录作为作为轴记录轴记录,从前、后双向扫描序列,通过交换,实,从前、后双向扫描序列,通过交换,实现大值记录后移,小值记录前移,最终将轴记录安置在一个现大值记录后移,小值记录前移,最终将轴记录安置在一个适当的位置。适当的位置。(小值记录在前、大值记录在后小值记录在前、大值记录在后)轴记录轴记录将原序列分割成两部分,依次对前后两部分重新设定将原序列分割成两部分,依次对前后两部分重新设定轴记录,继而分别再进行快速排序。轴记录,继而分别再进行快速排序。直至整个序
15、列有序。直至整个序列有序。交换排序交换排序快速排序快速排序第22页,此课件共56页哦快速排序快速排序算法思想算法思想第23页,此课件共56页哦38 65 97 76 13 27 4949lowlowhighhighpivot=49 0 1 2 3 4 5 6 70 1 2 3 4 5 6 7highhigh38 65 97 76 13 4927lowlow27 38 97 76 13 4965highhigh27 38 97 76 65 4913lowlow27 38 13 76 65 4997highhigh49快速排序快速排序算法思想算法思想第24页,此课件共56页哦 void Quick
16、(ArrNode*pnum,int low,int high)int i=low,j=high;ArrNode key;key=pnumi;if(i=j)return;while(i j)while(i key.key)j-;if(i j)pnumi=pnumj;i+;快速排序快速排序算法思想算法思想第25页,此课件共56页哦while(i j&pnumi.key key.key)i+;if(i j)pnumj=pnumi;j-;pnumi=key;printf(n);Quick(pnum,low,j-1);Quick(pnum,j+1,high);快排序快排序-分割过程伪码分割过程伪码第26
17、页,此课件共56页哦快速排序的效率分析快速排序的效率分析若若快快速速排排序序出出现现最最好好的的情情形形(左左、右右子子区区间间的的长长度度大大致致相相等等),则则结结点点数数n与与二二叉叉树树深深度度h应应满满足足log2nhlog2n+1,所所以以总总的的比比较较次次数数不不会会超超过过(n+1)log2n。因因此此,快快速速排排序序的的最最好好时时间间复复杂杂度度应应为为O(nlog2n)。而而且且在在理理论论上上已已经经证证明明,快快速速排排序序的的平平均均时时间间复复杂杂度度也也为为O(nlog2n)。)。若若快快速速排排序序出出现现最最坏坏的的情情形形(每每次次能能划划分分成成两两
18、个个子子区区间间,但但其其中中一一个个是是空空),则则这这时时得得到到的的二二叉叉树树是是一一棵棵单单分分枝枝树树,得得到到的的非非空空子子区区间间包包含含有有n-i个个(i代代表表二二叉叉树树的的层层数数(1in)元元素素,每每层层划划分分需需要要比比较较n-i+2次次,所所以以总总的的比比较次数为(较次数为(n2+3n-4)/2。因此,快速排序的最坏时间复杂度为。因此,快速排序的最坏时间复杂度为O(n2)。快快速速排排序序所所占占用用的的辅辅助助空空间间为为栈栈的的深深度度,故故最最好好的的空空间间复复杂杂度度为为O(log2n),最坏的空间复杂度为),最坏的空间复杂度为O(n)。快速排序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 常用 排序 算法 精选 PPT
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内