算法实验一乔方杰
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法分析与设计实验报告
实验一
任课老师:
学号:
姓名:
日期:2011-06-08
一、实验环境:
1.Windows7 旗舰版操作系统
2. 选用标准C语言作为开发语言
3.选用codeblock 10.05作为开发工具
4. 采用gcc编译器,对源码进行编译
二、实验内容:
问题描述:实现合并排序,插入排序,希尔排序,快速排序,冒泡排序,桶排序算法
实验要求:
A.在随机产生的空间大小分别为
N = 10, 1000,10000,100000的排序样本(取值为[0,1])上测试以上算法。
B.结果输出:
1)N=10时,排序结果。
2)N=1000,10000,100000时,对同一个样本实例,不同排序完成所需的时间。
3)N=1000,10000,100000时,每个排序用不同的样本多试验几次(最低5次)得出平均时间,比较不同排序算法所用的平均时间。
三、程序运行结果
3.1当样本空间为10的时候,先输出排序前的数,然后分别5次调用六种排序算法,输出排序后的结果以及排序的平均时间,截图如下
程序排序算法的排序结果
由上图可知,排序速度最快的是冒泡排序,最慢的是合并排序,而快速排序的性能一般。
但是由于需要排序的数太少,参考价值不大。
3.2 当样本空间为1000的时候,下图是各种排序5次运行后的平均时间:
由上图可知,当样本空间由10增长到1000时,冒泡排序的性能变为最差,表现最为突出的是快速排序,其次是桶排序。
但是此时快速排序和桶排序的平均时间差别不大,快速排序还没有展现出它的优越性能。
3.3 当样本空间为10000的时候,下图是各种排序5次运行后的平均时间:
由上图可知,当样本空间由1000增长到10000时,观察的结果和3.2中相差不大,此时快速排序比桶排序稍慢。
3.4 当样本空间为10000的时候,下图是各种排序5次运行后的平均时间:
由上图可知,当样本空间增长到100000时,快速排序的性能远远优于其他排序,它比桶排序节省了将近一半的时间。
并且合并排序也要明显优于插入排序,希尔排序和冒泡排序。
其中冒泡排序的性能相当的差,而插入排序和希尔排序差不多,由于希尔排序是对插入排序的改进,它的性能略微优于插入排序。
四.实验结果的分析与总结
1)通过上面的运行结果得知,快速排序的运行时间是最短的,因为快速排序的时间复杂度在一般情况下为O(nlgn)。
而归并排序和快排序的时间复杂度都为O(nlgn)。
2)而冒泡排序时间是最长,而插入排序的时间在数量级上与冒泡排序是一样的,这二种排序的时间复杂度都为O(n2),插入排序的时间性能比冒泡较好一点。
3)希尔排序(Shell Sort)是插入排序的一种,是针对直接插入排序算法的改进。
该方法又称缩小增量排序,但是希而排序的时间复杂度大约为O(n1.3),要优于直接插入排序,而优于直接插入排序的原因为:
当文件初态基本有序时直接插入排序所需的比较和移动次数均较少。
当n值较小时,n和n2的差别也较小,即直接插入排序的最好时间复杂度O(n)和最坏时间复杂度0(n2)差别不大。
在希尔排序开始时增量较大,分组较多,每组的记录数目少,故各组内直接插入较快,后来增量di逐渐缩小,分组数逐渐减少,而各组的记录数目逐渐增多,但由于已经按di-1作为距离排过序,使文件较接近于有序状态,所以新的一趟排序过程也较快
因此,希尔排序的时间性能要优于直接插入排序。
4)桶排序运用以空间代价换取时间代价,在桶排序算法中,运用了大量的空间,理想中桶排序的时间复杂度为O(n)。
但是由于数据哈希到桶中时有可能冲突,实际中也较难达到线性时间排序。
不过从观察的结果看,它的性能还是很不错的,仅次于快速排序。
程序清单目录截图:。