欢迎来到天天文库
浏览记录
ID:28826265
大小:66.50 KB
页数:5页
时间:2018-12-14
《排序算法实验报告材料》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实用标准文案实验课程:算法分析与设计实验名称:几种排序算法的平均性能比较(验证型实验)实验目标:(1)几种排序算法在平均情况下哪一个更快。(2)加深对时间复杂度概念的理解。实验任务:(1)实现几种排序算法(selectionsort,insertionsort,bottomupsort,quicksort,堆排序)。对于快速分类,SPLIT中的划分元素采用三者A(low),A(high),A((low+high)/2)中其值居中者。(2)随机产生20组数据(比如n=5000i,1≤i≤20)。数据均属于范围(0,105)内的整数。对于同一组数据,运行以上几
2、种排序算法,并记录各自的运行时间(以毫秒为单位)。(3)根据实验数据及其结果来比较这几种分类算法的平均时间和比较次数,并得出结论。实验设备及环境:PC;C/C++等编程语言。实验主要步骤:(1)明确实验目标和具体任务;(2)理解实验所涉及的几个分类算法;(3)编写程序实现上述分类算法;(4)设计实验数据并运行程序、记录运行的结果;(5)根据实验数据及其结果得出结论;(6)实验后的心得体会。一:问题分析(包括问题描述、建模、算法的基本思想及程序实现的技巧等):1:随机生成n个0到100000的随机数用来排序的算法如下.for(intn=1000;n<2000
3、0;n+=1000){inta[]=newint[n];for(inti=0;i4、j;for(inti=1;i=0&&b[i]5、st,intce,intfi){intcount=0;//a表示数组,st表示要排序的数据的起点,ce表示第一部分的终点也是第二部分的起点,fi表示第二部份的终点inti=st;intj=ce;精彩文档实用标准文案intcp=0;//由于数组c从0开始,而a是从st开始,并不一定是0.故要通过cp来表示c的第cp个值.intc[]=newint[fi-st];for(;ia[j]){count++;c[cp]=a[j];cp++;}elsebreak;}c[cp]=a[i];cp++;}//若6、j的值还小于fi则继续把j到fi的值复制给c.此处也与书上的不同,主要由自己的理解来实现for(;j7、h;j++){if(a[j]<=x){count++;i=i+1;if(i!=j){inttemp=a[i];a[i]=a[j];a[j]=temp;}}}inttemp=a[low];a[low]=a[i];a[i]=temp;intw=i;if(lowlow)count=count+spilt(a,low,w-1);//此处的if语句可以减少很多不必要的排序,例如只剩下一个数字时就不必再用spilt来排序了.if(w+18、验数据及其结果(可用图表形式给出):排序个数插入排序选择排序合并排
4、j;for(inti=1;i=0&&b[i]5、st,intce,intfi){intcount=0;//a表示数组,st表示要排序的数据的起点,ce表示第一部分的终点也是第二部分的起点,fi表示第二部份的终点inti=st;intj=ce;精彩文档实用标准文案intcp=0;//由于数组c从0开始,而a是从st开始,并不一定是0.故要通过cp来表示c的第cp个值.intc[]=newint[fi-st];for(;ia[j]){count++;c[cp]=a[j];cp++;}elsebreak;}c[cp]=a[i];cp++;}//若6、j的值还小于fi则继续把j到fi的值复制给c.此处也与书上的不同,主要由自己的理解来实现for(;j7、h;j++){if(a[j]<=x){count++;i=i+1;if(i!=j){inttemp=a[i];a[i]=a[j];a[j]=temp;}}}inttemp=a[low];a[low]=a[i];a[i]=temp;intw=i;if(lowlow)count=count+spilt(a,low,w-1);//此处的if语句可以减少很多不必要的排序,例如只剩下一个数字时就不必再用spilt来排序了.if(w+18、验数据及其结果(可用图表形式给出):排序个数插入排序选择排序合并排
5、st,intce,intfi){intcount=0;//a表示数组,st表示要排序的数据的起点,ce表示第一部分的终点也是第二部分的起点,fi表示第二部份的终点inti=st;intj=ce;精彩文档实用标准文案intcp=0;//由于数组c从0开始,而a是从st开始,并不一定是0.故要通过cp来表示c的第cp个值.intc[]=newint[fi-st];for(;ia[j]){count++;c[cp]=a[j];cp++;}elsebreak;}c[cp]=a[i];cp++;}//若
6、j的值还小于fi则继续把j到fi的值复制给c.此处也与书上的不同,主要由自己的理解来实现for(;j7、h;j++){if(a[j]<=x){count++;i=i+1;if(i!=j){inttemp=a[i];a[i]=a[j];a[j]=temp;}}}inttemp=a[low];a[low]=a[i];a[i]=temp;intw=i;if(lowlow)count=count+spilt(a,low,w-1);//此处的if语句可以减少很多不必要的排序,例如只剩下一个数字时就不必再用spilt来排序了.if(w+18、验数据及其结果(可用图表形式给出):排序个数插入排序选择排序合并排
7、h;j++){if(a[j]<=x){count++;i=i+1;if(i!=j){inttemp=a[i];a[i]=a[j];a[j]=temp;}}}inttemp=a[low];a[low]=a[i];a[i]=temp;intw=i;if(lowlow)count=count+spilt(a,low,w-1);//此处的if语句可以减少很多不必要的排序,例如只剩下一个数字时就不必再用spilt来排序了.if(w+18、验数据及其结果(可用图表形式给出):排序个数插入排序选择排序合并排
8、验数据及其结果(可用图表形式给出):排序个数插入排序选择排序合并排
此文档下载收益归作者所有