C++各类排序算法介绍ppt课件.ppt
《C++各类排序算法介绍ppt课件.ppt》由会员分享,可在线阅读,更多相关《C++各类排序算法介绍ppt课件.ppt(52页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、资资金是金是运运动动的价的价值值,资资金的价金的价值值是是随随时间变时间变化而化而变变化的,是化的,是时间时间的函的函数数,随随时间时间的推移而增的推移而增值值,其增,其增值值的的这这部分部分资资金就是原有金就是原有资资金的金的时间时间价价值值contents9.1 概述概述9.2 插入排序插入排序1.1.直插排序直插排序2.2.二分插入排序二分插入排序 3.3.希尔排序希尔排序9.3 交换排序交换排序1.1.冒泡排序冒泡排序2.2.快速排序快速排序 9.4 选择排序选择排序1.1.直选排序直选排序2.2.堆排序堆排序9.5 归并排序归并排序1.1.二路归并排序二路归并排序2023/3/221
2、资资金是金是运运动动的价的价值值,资资金的价金的价值值是是随随时间变时间变化而化而变变化的,是化的,是时间时间的函的函数数,随随时间时间的推移而增的推移而增值值,其增,其增值值的的这这部分部分资资金就是原有金就是原有资资金的金的时间时间价价值值9.1 概述概述排序定义排序定义将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列叫排序分类排序分类按待排序记录所在位置内部排序:待排序记录存放在内存外部排序:排序过程中需对外存进行访问的排序按排序依据原则插入排序:直接插入排序、折半插入排序、希尔排序交换排序:冒泡排序、快速排序选择排序:简单选择排序、堆排序归并排序:2-路归并排序基数
3、排序2023/3/222资资金是金是运运动动的价的价值值,资资金的价金的价值值是是随随时间变时间变化而化而变变化的,是化的,是时间时间的函的函数数,随随时间时间的推移而增的推移而增值值,其增,其增值值的的这这部分部分资资金就是原有金就是原有资资金的金的时间时间价价值值按排序所需工作量简单的排序方法:T(n)=O(n)先进的排序方法:T(n)=O(logn)基数排序:T(n)=O(d.n)排序基本操作排序基本操作比较两个关键字大小将记录从一个位置移动到另一个位置2023/3/223资资金是金是运运动动的价的价值值,资资金的价金的价值值是是随随时间变时间变化而化而变变化的,是化的,是时间时间的函的
4、函数数,随随时间时间的推移而增的推移而增值值,其增,其增值值的的这这部分部分资资金就是原有金就是原有资资金的金的时间时间价价值值基本思想:基本思想:每次将一个待排序的记录,按其关键字值的大小插入到已经排好序的表中,直至全部插入完成。根据“寻找寻找”插入位置的方法插入位置的方法不同,插入法可分为:直插排序、二分插入排序、希尔排序。(1)直接插入排序直接插入排序若将一个未排序的元素Li插入到已排序的具有i-1个元素的序列的适当位置,步骤如下:a.从右向左顺序搜索已排序的序列,若已排序序列中的元素比Li大,则后移一个位置,直至找到一个元素Lj-1(0j-1i-1)的关键字值比Li的关键字值小;b.将
5、Li插入表中第j个位置上,成为Lj。9.2 插入排序插入排序2023/3/224资资金是金是运运动动的价的价值值,资资金的价金的价值值是是随随时间变时间变化而化而变变化的,是化的,是时间时间的函的函数数,随随时间时间的推移而增的推移而增值值,其增,其增值值的的这这部分部分资资金就是原有金就是原有资资金的金的时间时间价价值值例49 38 65 97 76 13 27i=2 38 (38 49)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 1
6、3 (13 38 49 65 76 97)27i=1 ()i=7 (13 38 49 65 76 97)2727jjjjjj977665493827 (13 27 38 49 65 76 97)排序结果:2023/3/225资资金是金是运运动动的价的价值值,资资金的价金的价值值是是随随时间变时间变化而化而变变化的,是化的,是时间时间的函的函数数,随随时间时间的推移而增的推移而增值值,其增,其增值值的的这这部分部分资资金就是原有金就是原有资资金的金的时间时间价价值值void InsertSort(int a,const int n)for(int i=1;in;i+)/i表示插入次数,共进行表示
7、插入次数,共进行n-1次插入次插入if(aiai-1)/将将ai插入到有序区插入到有序区a0,ai-1中,中,/且且aiai-1int x=ai;/把待排序元素赋给把待排序元素赋给 x/从从ai-2开始比较开始比较for(int j=i-1;(x=0);j-)aj+1=aj;/从从ai-1开始后移一位开始后移一位/直到找到一个元素,插入到正确位置直到找到一个元素,插入到正确位置aj+1=x;2023/3/226资资金是金是运运动动的价的价值值,资资金的价金的价值值是是随随时间变时间变化而化而变变化的,是化的,是时间时间的函的函数数,随随时间时间的推移而增的推移而增值值,其增,其增值值的的这这部
8、分部分资资金就是原有金就是原有资资金的金的时间时间价价值值算法评价时间复杂度若待排序记录按关键字从小到大排列(正序)Y关键字比较次数:Y记录移动次数:若待排序记录按关键字从大到小排列(逆序)Y关键字比较次数:Y记录移动次数:若待排序记录是随机的,取平均值Y关键字比较次数:Y记录移动次数:T(n)=O(n)2023/3/227资资金是金是运运动动的价的价值值,资资金的价金的价值值是是随随时间变时间变化而化而变变化的,是化的,是时间时间的函的函数数,随随时间时间的推移而增的推移而增值值,其增,其增值值的的这这部分部分资资金就是原有金就是原有资资金的金的时间时间价价值值(2)折半插入排序折半插入排序
9、排序过程:用折半查找方法确定插入位置的排序叫例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 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)2023/3/228资资金是金是运运动动的价的价值值,资
10、资金的价金的价值值是是随随时间变时间变化而化而变变化的,是化的,是时间时间的函的函数数,随随时间时间的推移而增的推移而增值值,其增,其增值值的的这这部分部分资资金就是原有金就是原有资资金的金的时间时间价价值值算法描述时间复杂度:T(n)=O(n)void BinsertSort(int a,const int n)for(int i=1;in;i+)int b=ai;int low=0;int high=i-1;while(low=high)int m=(low+high)/2;if(b=high+1;j-)aj+1=aj;ahigh+1=b;2023/3/229资资金是金是运运动动的价的价值
11、值,资资金的价金的价值值是是随随时间变时间变化而化而变变化的,是化的,是时间时间的函的函数数,随随时间时间的推移而增的推移而增值值,其增,其增值值的的这这部分部分资资金就是原有金就是原有资资金的金的时间时间价价值值(3)希尔排序希尔排序(缩小增量法缩小增量法)排序过程:先取一个正整数d1n,把所有相隔d1的记录放一组,组内进行直接插入排序直接插入排序;然后取d2d1,重复上述分组和排序操作;直至di=1,即所有记录放进一个组中排序为止。2023/3/2210资资金是金是运运动动的价的价值值,资资金的价金的价值值是是随随时间变时间变化而化而变变化的,是化的,是时间时间的函的函数数,随随时间时间的
12、推移而增的推移而增值值,其增,其增值值的的这这部分部分资资金就是原有金就是原有资资金的金的时间时间价价值值取d3=1三趟分组:13 27 48 55 4 49 38 65 97 76三趟排序:4 13 27 38 48 49 55 65 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 762
13、023/3/2211资资金是金是运运动动的价的价值值,资资金的价金的价值值是是随随时间变时间变化而化而变变化的,是化的,是时间时间的函的函数数,随随时间时间的推移而增的推移而增值值,其增,其增值值的的这这部分部分资资金就是原有金就是原有资资金的金的时间时间价价值值算法描述算法描述例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 76jiji274jiji55ji38jijiji二趟排序:13 4 48 38 27 49 55 65 97 76jiji6548j
14、i9755ji7642023/3/2212资资金是金是运运动动的价的价值值,资资金的价金的价值值是是随随时间变时间变化而化而变变化的,是化的,是时间时间的函的函数数,随随时间时间的推移而增的推移而增值值,其增,其增值值的的这这部分部分资资金就是原有金就是原有资资金的金的时间时间价价值值void ShellInsert(int a,int n,int dk)for(int i=dk;in;i+)if(ai=0)&(baj);j-=dk)aj+dk=aj;aj+dk=b;void ShellSort(int a,int n,int dlta,int t)for(int k=0;kr2.key,则交
15、换;然后比较第二个记录与第三个记录;依次类推,直至第n-1个记录和第n个记录比较为止第一趟冒泡排序,结果关键字最大的记录被安置在最后一个记录上。对前n-1个记录进行第二趟冒泡排序,结果使关键字次大的记录被安置在第n-1个记录位置。重复上述过程,直到“在一趟排序过程中没有进行过交换记录的操作”为止。9.3 交换排序交换排序2023/3/2215资资金是金是运运动动的价的价值值,资资金的价金的价值值是是随随时间变时间变化而化而变变化的,是化的,是时间时间的函的函数数,随随时间时间的推移而增的推移而增值值,其增,其增值值的的这这部分部分资资金就是原有金就是原有资资金的金的时间时间价价值值例49 38
16、 65 97 76 13 27 30初始关键字38 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第六趟384976971397279730971376767627301365276530651313494930492738273830382023/3/2216资资金是金是运运动动的价的价值值,资资金的价金的价值值是是随随时间变时间变化而化而变变化的,是化的,是时间时间的函的函数数,随随时间时间的推移而增的推移而增值值,其增,其增值
17、值的的这这部分部分资资金就是原有金就是原有资资金的金的时间时间价价值值void bubble_sort(JD r,int n)int m,i,j,flag=1;/当当flag为为0则停止排序则停止排序JD x;m=n-1;while(m0)&(flag=1)/m表示趟数表示趟数flag=0;/开始时元素未交换开始时元素未交换for(j=1;jrj+1.key)/发生逆序发生逆序 flag=1;x=rj;rj=rj+1;rj+1=x;/交换,并标记发生了交换m-;/while冒泡算法描述2023/3/2217资资金是金是运运动动的价的价值值,资资金的价金的价值值是是随随时间变时间变化而化而变变化
18、的,是化的,是时间时间的函的函数数,随随时间时间的推移而增的推移而增值值,其增,其增值值的的这这部分部分资资金就是原有金就是原有资资金的金的时间时间价价值值算法评价时间复杂度最好情况(正序)Y比较次数:n-1Y移动次数:0最坏情况(逆序)Y比较次数:Y移动次数:T(n)=O(n)Ch8_4.c2023/3/2218资资金是金是运运动动的价的价值值,资资金的价金的价值值是是随随时间变时间变化而化而变变化的,是化的,是时间时间的函的函数数,随随时间时间的推移而增的推移而增值值,其增,其增值值的的这这部分部分资资金就是原有金就是原有资资金的金的时间时间价价值值(2)快速排序快速排序基本思想:通过一趟
19、排序,将待排序记录分割成独立的独立的两部分两部分,其中一部分记录的关键字均比另一部分记录的另一部分记录的关键字小关键字小,则可分别对这两部分记录进行排序,以达到整个序列有序。排序过程:对rst中记录进行一趟快速排序,附设两个指针i和j,设基准值基准值记录rp=rs,x=rp.key初始时令i=s,j=t首先从j所指位置向前搜索第一个关键字小于x的记录,并和rp交换再从i所指位置起向后搜索,找到第一个关键字大于x的记录,和rp交换重复上述两步,直至i=j为止再分别对两个子序列进行快速排序,直到每个子序列只含有一个记录为止关键字通常取第一个记录的值为基准值。关键字通常取第一个记录的值为基准值。20
20、23/3/2219资资金是金是运运动动的价的价值值,资资金的价金的价值值是是随随时间变时间变化而化而变变化的,是化的,是时间时间的函的函数数,随随时间时间的推移而增的推移而增值值,其增,其增值值的的这这部分部分资资金就是原有金就是原有资资金的金的时间时间价价值值例初始关键字:49 38 65 97 76 13 27 50 ijxji 完成一趟排序:(27 38 13)49 (76 97 65 50)分别进行快速排序:(13)27 (38)49 (50 65)76 (97)快速排序结束:13 27 38 49 50 65 76 974927ijijij4965ji1349ij4997ij2023
21、/3/2220资资金是金是运运动动的价的价值值,资资金的价金的价值值是是随随时间变时间变化而化而变变化的,是化的,是时间时间的函的函数数,随随时间时间的推移而增的推移而增值值,其增,其增值值的的这这部分部分资资金就是原有金就是原有资资金的金的时间时间价价值值void qksort(JD r,int t,int w)int i,j,k;JD x;if(t=w)return;i=t;j=w;x=ri;while(ij)while(i=x.key)j-;if(ij)ri=rj;i+;while(ij)&(ri.key=x.key)i+;if(ij)rj=ri;j-;ri=x;qksort(r,t,j
22、-1);qksort(r,j+1,w);快速算法描述2023/3/2221资资金是金是运运动动的价的价值值,资资金的价金的价值值是是随随时间变时间变化而化而变变化的,是化的,是时间时间的函的函数数,随随时间时间的推移而增的推移而增值值,其增,其增值值的的这这部分部分资资金就是原有金就是原有资资金的金的时间时间价价值值算法评价时间复杂度最好情况(每次总是选到中间值作枢轴)T(n)=O(nlog2n)最坏情况(每次总是选到最小或最大元素作枢轴)T(n)=O(n)T(n)=O(n)Ch8_5.c2023/3/2222资资金是金是运运动动的价的价值值,资资金的价金的价值值是是随随时间变时间变化而化而变
23、变化的,是化的,是时间时间的函的函数数,随随时间时间的推移而增的推移而增值值,其增,其增值值的的这这部分部分资资金就是原有金就是原有资资金的金的时间时间价价值值(0)选择排序原理:选择排序原理:将待排序的结点分为已排序(初始为空)和未排序两组,依次将未排序的结点中值最小的结点未排序的结点中值最小的结点插入已排序的组中。(1)直接选择排序过程直接选择排序过程首先通过n-1次关键字比较,从n个记录中找出关键字最小的记录,将它与第一个记录交换再通过n-2次比较,从剩余的n-1个记录中找出关键字次小的记录,将它与第二个记录交换重复上述操作,共进行n-1趟排序后,排序结束9.4 选择排序选择排序2023
24、/3/2223资资金是金是运运动动的价的价值值,资资金的价金的价值值是是随随时间变时间变化而化而变变化的,是化的,是时间时间的函的函数数,随随时间时间的推移而增的推移而增值值,其增,其增值值的的这这部分部分资资金就是原有金就是原有资资金的金的时间时间价价值值例初始:49 38 65 97 76 13 27 kjjjjjjkki=11349一趟: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
25、 76 六趟:13 27 38 49 65 76 97 排序结束:13 27 38 49 65 76 972023/3/2224资资金是金是运运动动的价的价值值,资资金的价金的价值值是是随随时间变时间变化而化而变变化的,是化的,是时间时间的函的函数数,随随时间时间的推移而增的推移而增值值,其增,其增值值的的这这部分部分资资金就是原有金就是原有资资金的金的时间时间价价值值void smp_selesort(JD r,int n)int i,j,k;JD x;for(i=1;in;i+)k=i;for(j=i+1;j=n;j+)if(rj.keyrk.key)k=j;if(i!=k)x=ri;ri
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 各类 排序 算法 介绍 ppt 课件
限制150内