1、 算法设计与分析实验名称:各种排序算法的性能测试作者姓名 : xxx xxx xxx完成日期:2013 年 9 月 1 日星期日组的编号:28目录第一章:简介 1第二章:算法规范 2数据结构 .2伪代码 3第三章:算法测试 4随机数比较 .4最优表 5最差表 5第四章:分析讨论 6算法分析 .6时间复杂度分析 6附录 7声明 7第 1 页第 1 章:简介 问题的描述:排序的主要目的是为了进行快速查找。排序就是将一个记录的无序序列调整成为一个有序序列的过程。在对记录进行排序的时候,需要选定一个信息作为排序的依据。在数据结构课程中,我们已经学过了几种内部排序算法,没有一种排序算法在任何情况下都是最
2、好的解决方案,有些排序算法比较简单,但速度相对比较慢;有些排序算法速度比较快,但却很复杂。利用随机函数产生 N 个随机整数(N=5000) ,利用冒泡排序,选择排序,快速排序(结果由小到大的排序)并统计每一种排序所消耗的时间。把排序花的时间排在表格里面。第 2 页第二章:算法规范数据结构:在所有的三个排序策略中,我们用了数组,函数作为主要的数据结构。因为我们只是测试了不同排序所需要的时间,没涉及其他复杂的操作,所以在这个项目中用了静态实现数组就可以。伪代码如下所示冒泡排序:1. int i,j,l,aN;2. 循环 i 从 0 到 N-12.1. 产生随机数到 ai;2.2. 输出随机数组(无
3、序);3. 循环 i:0 到 N-13.1循环 j:0 到 N-1;3.2if aiai+1;aiai+1;3.3输出有序随机数组;选择排序:第 3 页1.int i,j,l,aN,k;2.循环 i 从 0 到 N-12.1 产生随机数到 ai;2.2 输出随机数组(无序);3 循环 i:0 到 N-13.1循环 j:i+1 到 N-1;3.2if aiai+1;aiaj;3.3输出有序随机数组;快速排序:1.int i,t,l,aN,mid,dataN,start,end;2.循环 i 从 0 到 N2.1 产生随机数到 ai;2.2 输出随机数组(无序);3. while start=mi
4、d3.2 while start#include#include#define N 40000void BubbleSort()/冒泡排序int i,j,l;int aN;for(i=0;ii;j-)if(aj-1aj)l=aj-1;aj-1=aj;aj=l;/printf(“%dn“,ai);/输出有序数组第 8 页int QuickSort()/快速排序int i,t;int aN;int mid;int dataN;int start=0;int end=N;for(i=0;i=mid)-end;t=dataend;dataend=datastart;datastart=t;while(
5、startaj)l=ai;ai=aj;aj=l;/printf(“%dn“,ai);void main() printf(“一下是各个排序算法的代号:n“);printf(“一,冒泡排序n“);printf(“二,快速排序n“);printf(“三,选择排序n“);int figure;/*统计时间所用的标记*/printf(“请输入figure:“);scanf(“%d“,time_t start=clock();/定义程序开始时间变量time_t finish=clock();/定义程序结束时间变量double duration;printf(“*n“);printf(“n“);print
6、f(“n“);printf(“n“);printf(“*n“);switch(figure)第 10 页case 1:start=clock();BubbleSort();/调用冒泡排序finish=clock();break;case 2:start=clock();QuickSort();/调用快速排序finish=clock();break;case 3:start=clock();ChooseSort();/调用选择排序finish=clock();break;duration=(double)(finish-start)/1000;printf(“n本次的时间是:%lf secondsn“,duration);声明我们在此声明,这个题为“各种排序算法的性能测试”的项目的所有工作是由作为一组的我们的成员的各自的努力而完成的。人员安排: 程序员:xxx第 11 页测试员:xxx报告书写员:xxx