排序算法比较
实验9 排序算法实验比较日志
(冒泡排序&快速排序)
2020年1月5日星期二 14:00
实验目的:
基于教材内容,任选两种排序算法,实现并比较性能。
基本要求:
(1)至少要有一种排序算法的性能优于O(n2)。
(2)对实现的排序算法进行实验比较,实验比较数据参见教材7.8章节。
(3)排序算法要基于教材,测试输入的整数数据文件(5个,文件中数据规模分别是100,1K,10K,100K和1M),排序结果也要输出到文件中。
(4)要在屏幕上输出排序过程所花费时间。
(5)提交最终实验作业。用附件的形式,提交两个文件:一个压缩包(包含源码和5个用于排序测试的数据文件);一个pdf文档(文档中包含实验日志和一个根据基本要求(1)记录实验结果的表格,然后进行适当的实验结果分析)。
实验过程:
1.生成测试用整数数据文件
本次比较的冒泡排序算法和快速排序算法所用测试数据相同,各个规模的测试数据文件由excel中的RANDBETWEEN函数随机生成保存在对应的txt文件中。
2.构造查找算法函数
(1)冒泡排序
以下为升序排序,降序排序同理,这里不再赘叙。
(2)快速排序
以下为升序排序,降序排序同理,这里不再赘叙。
3.编写排序测试算法函数
利用for循环将测试数据文件中的数据读入数组,然后对数组进行排序操作并将排序结果(包括进行排序处理后数据和排序时间)输出在相应记录结果的txt文件中,最后将排序时间输出到屏幕上。
(1)冒泡排序测试函数
(2)快速排序测试函数
4.编写主函数
在主函数中依次调用不同数据规模下的排序测试函数。
5.以表格形式记录各个排序时间并分析
实验细节:
1.精确获取排序时间并将排序结果输出记录到相应文件
使用如下函数组合可精确至微秒级地获取程序运行时间 (具体实现参照上图排序测试函数),本实验中时间换算 为毫秒单 位,之后将排序结果(排序后数据和排序时间) 输出记录在 相应文件中。
部分实现效果截图:
2.将排序时间输出到屏幕上。
将不同数据规模下的不同排序算法的测试时间输出到屏 幕上,便于后续进行表格统计。
实现效果截图:
3.将两种排序函数修改为降序排序并重新运行程序
本实验中排序函数初始都为升序排序,修改为降序排序后 再运行可以得到一组新的实验比较数据。
实现效果截图:
统计表格并分析:
分析:
由于不同数据规模的排序测试文件只有一个,排序实验样本数较少,且程序运行时间与实验环境(处理器:,操作系统:Windows 10)都有关,过于精细时间差也无法记录,故此次实验结果存在一定误差。
(1)冒泡排序:数据规模由100到1M,冒泡排序运行时间变化明显,时间变化趋势为逐渐增长,由于误差原因,粗略估计数据规模以10的倍率增长时,冒泡排序时间以100的倍率增长,时间复杂度为O(n2),可以看到本次实验结果与理论知识吻合得很好。另外考虑到误差原因可以认为升序排序和降序排序在相同数据规模下的运行时间是相似的,都在同一个数量级,说明输入数据的初始顺序对冒泡排序算法几乎影响。
(2)快速排序:数据规模由100到1M,快速排序运行时间变化较明显,时间变化趋势为逐渐增长,由于误差原因,粗略估计数据规模以10的倍率增长时,快速排序时间以10的倍率增长。根据理论知识可得,快速排序的时间复杂度为O(nlogn),可以看到本次实验结果与理论知识吻合得很好。另外考虑到误差原因可以认为升序排序和降序排序在相同数据规模下的运行时间是相似的,都在同一个数量级,说明输入数据的初始顺序对快速排序算法几乎影响。
(3)比较两个算法,可以发现,在各个数据规模下无论是升序排序还是降序排序,快速排序时间都比冒泡排序时间小。数据规模为100时冒泡排序时间与快速排序时间相差一个数量级,数据规模为1K和10K时冒泡排序时间与快速排序时间相差大约两个数量级,数据规模为100K时冒泡排序时间与快速排序时间相差三个数量级,数据规模为1M时冒泡排序时间与快速排序时间相差四个数量级。
综上,输入数据的初始顺序对冒泡排序和快速排序都没有什么影响。但是在本次实验中各个数据规模下快速排序的性能都是优于冒泡排序的,且冒泡排序时间增长速率大于快速排序时间增长速率。另外,在排序数据的规模较小时(小于1K),两种算法的时间差别并不是非常大。而当数据规模较大时,快速排序的优势十分明显,与冒泡排序的时间相差可以达到四个数量级。故处理大容量数据排序问题时,相较于冒泡排序,快速排序才是更优算法。