各种排序算法地性能测试.docx
- 文档编号:23219016
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:13
- 大小:50.12KB
各种排序算法地性能测试.docx
《各种排序算法地性能测试.docx》由会员分享,可在线阅读,更多相关《各种排序算法地性能测试.docx(13页珍藏版)》请在冰豆网上搜索。
各种排序算法地性能测试
组的编号:
28
作者姓名:
xxx
xxx
xxx
实验名称:
各种排序算法的性能测试
算法设计与分析
完成日期:
2013年9月1日星期日
第一章:
简介1
第二章:
算法规范2
数据结构2
伪代码3
第三章:
算法测试4
随机数比较4
最优表5
最差表5
第四章:
分析讨论6
算法分析6
时间复杂度分析6
附录7
声明7
第1章:
简介
问题的描述:
排序的主要目的是为了进行快速查找。
排序就是将一个记录的无序序列调整成为一个有序序列的过程。
在对记录进行排序的时候,需要选定一个信息作为排序的依据。
在数据结构课程中,我们已经学过了几种内部排序算法,没有一种排序算法在任何情况下都是最好的解决方案,有些排序算法比较简单,但速度相对比较慢;有些排序算法速度比较快,但却很复杂。
利用随机函数产生N个随机整数(N=5000),利用冒泡排序,选择排序,快速排序(结果由小到大的排序)并统计每一种排序所消耗的时间。
把排序花的时间排在表格里面。
第二章:
算法规范
数据结构:
在所有的三个排序策略中,我们用了数组,函数作为主要的数据结构。
因为我们只是测试了不同排序所需要的时间,没涉及其他复杂的操作,所以在这个项目中用了静态实现数组就可以。
伪代码如下所示
冒泡排序:
1.inti,j,l,a[N];
2.循环i从0到N-1
2.1.产生随机数到a[i];
2.2.输出随机数组(无序);
3.循环i:
0到N-1
3.1.循环j:
0到N-1;
3.2.ifa[i]>a[i+1];a[i]<->a[i+1];
3.3.输出有序随机数组;
选择排序:
1.inti,j,l,a[N],k;
2.循环i从0到N-1
2.1产生随机数到a[i];
2.2输出随机数组(无序);
3循环i:
0到N-1
3.1.循环j:
i+1到N-1;
3.2.ifa[i]>a[i+1];a[i]<->a[j];
3.3.输出有序随机数组;
快速排序:
1.inti,t,l,a[N],mid,data[N],start,end;
2.循环i从0到N
2.1产生随机数到a[i];
2.2输出随机数组(无序);
3.whilestart 3.1.Whilestart 3.2whilestart 3.3.输出有序随机数组; 第三章: 测试结果 一: 随机数比较 表一: *随机数 冒泡 快速 选择 100 0.000000 0.000000 0.001000 1000 0.007000 0.000000 0.013000 2000 0.027000 0.001000 0.034000 4000 0.072000 0.000000 0.087000 10000 0.346000 0.000000 0.376000 20000 1.400000 0.000000 1.592000 40000 5.886000 0.001000 6.305000 注: 该数据时间为注释数据的输出语句,运行程序所得的时间(s) 图一: 二: 最优表 表二: 最优(升序) 冒泡 快速 选择 100 0.000000 0.000000 0.001000 1000 0.002000 0.001000 0.004000 2000 0.032000 0.000000 0.017000 4000 0.063000 0.000000 0.048000 10000 0.187000 0.000000 0.180000 20000 0.753000 0.001000 0.594000 40000 2.960000 0.000000 2.319000 注: 该数据时间为注释数据的输出语句,运行程序所得的时间(s) 图二: 三: 最差表 表三: 最差(逆序) 冒泡 快速 选择 100 0.000000 0.000000 0.001000 1000 0.007000 0.000000 0.008000 2000 0.014000 0.000000 0.027000 4000 0.062000 0.000000 0.089000 10000 0.270000 0.000000 0.252000 20000 0.969000 0.000000 0.949000 40000 3.819000 0.001000 3.756000 注: 该数据时间为注释数据的输出语句,运行程序所得的时间(s) 图三: 第四章: 分析和讨论 (一)算法思想分析: 1.冒泡排序: 通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的排序码,若发现逆序则交换,使排序码较小的元素逐渐从后部移向前部(从下标较大的单元移向下标较小的单元),就象水底下的气泡一样逐渐向上冒。 2.选择排序: 假设待排序的列表的n个数据元素放在数组a中,第一次从n个数据元素中找出最小的元素与a[0]交换,第二次从剩下的n-1个元素中找出最小的元素与a[1]交换,……直到第n-1次在剩下的两个元素中找出最小的元素与a[n-1]交换,剩下的最后一个元素的位置就在a[n]. 3.快速排序: 任取待排序序列中的某个元素作为基准(一般取第一个元素),通过一趟排序,将待排元素分为左右两个子序列,左子序列元素的排序码均小于或等于基准元素的排序码,右子序列的排序码则大于基准元素的排序码,然后分别对两个子序列继续进行排序,直至整个序列有序。 (二)时间复杂度分析 排序算法 最差时间 时间复杂度 是否稳定? 冒泡排序 O(n2) O(n2) 稳定 选择排序 O(n2) O(n2) 稳定 快速排序 O(n2) O(n*log2n) 不稳定 附录: 源代码(基于c语言) #include #include #include #defineN40000 voidBubbleSort()//冒泡排序 { inti,j,l; inta[N]; for(i=0;i { a[i]=N-i;//最差情况,数组数据逆序 //a[i]=i;//最优情况,数组数据正序 //a[i]=(int)rand(); //printf("%d",a[i]);//输出无序随机数数组 } printf("\n"); printf("***********************************"); printf("\n"); for(i=0;i { for(j=N-1;j>i;j--) { if(a[j-1]>a[j]) { l=a[j-1]; a[j-1]=a[j]; a[j]=l; } } //printf("%d\n",a[i]);//输出有序数组 } } intQuickSort()//快速排序 { inti,t; inta[N]; intmid; intdata[N]; intstart=0; intend=N; for(i=0;i { a[i]=N-i;//最差情况,数组数据逆序 //a[i]=i;//最优情况,数组数据正序 //a[i]=(int)rand(); //printf("%d",a[i]);//输出无序随机数数组 } printf("\n"); data[0]=data[start]; mid=data[start]; while(start { while((start { --end; } t=data[end]; data[end]=data[start]; data[start]=t; while((start { ++start; } t=data[start]; data[start]=data[end]; data[end]=t; } data[start]=data[0]; returnstart; } voidChooseSort()//选择排序 {inti,j,k,l; inta[N]; for(i=0;i { a[i]=N-i;//最差情况,数组数据逆序 //a[i]=i;//最优情况,数组数据正序 //a[i]=(int)rand(); //printf("%d",a[i]);输出无序随机数数组 } printf("\n"); printf("***********************************"); printf("\n"); for(i=0;i { k=i; for(j=i+1;j { if(a[i]>a[j]) { l=a[i]; a[i]=a[j]; a[j]=l; } } //printf("%d\n",a[i]); } } voidmain() { printf("一下是各个排序算法的代号: \n"); printf("一,冒泡排序\n"); printf("二,快速排序\n"); printf("三,选择排序\n"); intfigure;/*统计时间所用的标记*/ printf("请输入figure: "); scanf("%d",&figure); time_tstart=clock();//定义程序开始时间变量 time_tfinish=clock();//定义程序结束时间变量 doubleduration; printf("*************************************\n"); printf("\n"); printf("\n"); printf("\n"); printf("*************************************\n"); switch(figure) { case1: start=clock(); BubbleSort();//调用冒泡排序 finish=clock(); break; case2: start=clock(); QuickSort();//调用快速排序 finish=clock(); break; case3: start=clock(); ChooseSort();//调用选择排序 finish=clock(); break; } duration=(double)(finish-start)/1000; printf("\n本次的时间是: %lfseconds\n",duration); } 声明 我们在此声明,这个题为“各种排序算法的性能测试”的项目的所有工作是由作为一组的我们的成员的各自的努力而完成的。 人员安排: 程序员: xxx 测试员: xxx 报告书写员: xxx
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 各种 排序 算法 性能 测试