欢迎来到天天文库
浏览记录
ID:27779132
大小:307.17 KB
页数:15页
时间:2018-12-06
《算法分析和复杂性理论实验报告基本排序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、专业整理深圳大学实验报告课程名称:算法设计与分析实验名称:多种排序算法的算法实现及性能比较学院:计算机与软件学院专业:计算机科学与技术报告人:张健哲学号:2013150372班级:3同组人:无指导教师:李炎然实验时间:2015/3/25——2015/4/8实验报告提交时间:2015/4/8教务处制WORD格式专业整理一.实验目的1.掌握选择排序、冒泡排序、合并排序、快速排序、插入排序算法原理2.掌握不同排序算法时间效率的经验分析方法,验证理论分析与经验分析的一致性。二.实验步骤与结果实验总体思路:利用switch
2、结构来选择实验所要用的排序算法,每一种排序都用相同的计算运行时间的代码,不同的算法就在算法实现部分进行改动(如下代码1至5所示)。不断的改变数据规模,每一个规模在实验时,用循环进行多次实验并作为样本记录消耗的时间。最后输出在不同排序算法下,不同的数据规模的20次实验样本和平均用时(如下图1至5所示)。各排序算法的实现及实验结果:(注1:以下代码全部为伪代码,具体代码实现请参照程序中的代码)(注2:图中显示的时间单位均为毫秒,图中“排序所花时间”一项为平均消耗时间,平均消耗时间结果以20组样本计算平均值后取整得到(
3、并非四舍五入)。)1、选择排序代码1:fori=0ton-2min=iforj=i+1ton-1ifele[min]>ele[j]min=jswap(ele[i],ele[min])//交换图1、选择排序在不同数据规模下排序所消耗的时间WORD格式专业整理2、冒泡排序代码2:fori=0ton-1forj=0ton-1-iifa[j]>a[j+1]swap(a[j],a[j+1])//交换图2、冒泡排序在不同数据规模下排序所消耗的时间3、合并排序代码3:Merge(ele[1...n],left,right)mi
4、ddle=(left+right)/2ifright>1eft+1Merge(ele,left,middle)Merge(ele,middle+1,right)l←leftr←righti←leftwhilel<=middle&&r<=right//两组分别一一比较,数据小的放入eleifele[l]<=ele[r]t[i++]←ele[l++]elset[i++]←ele[r++]whilel>middle&&r<=r//只剩一组还有剩余的时,将剩下的按顺序放入ele[i++]=s[r++]whilel<=mi
5、ddle&&r>rightele[i++]=s[l++];WORD格式专业整理图3、合并排序在不同数据规模下排序所消耗的时间4、快速排序代码4:quick(ele[0...n-1],left,right)iflele[l]//与上面相反ll++ifl6、;quick(ele,left,l-1)//递归调用quick(ele,l+1,right)WORD格式专业整理图4、快速排序在不同数据规模下排序所消耗的时间5、插入排序代码5:fori=1→n-1ifele[i]tempele[j+1]←ele[j]ele[j+1]←temp图5、插入排序在不同数据规模下排序所消耗的时间WORD格式专业整理三.实验分析选择排序:图6、由图1数据整合而成的折线图为了更清晰的看到排序的数据规模与排序所需7、时间之间的影响,我将实验的数据规模进行了一些调整,得到的平均数据依旧是以20组数据样本取平均数算得(如下表1、图7所示):(由于图片占空间大且表达不直白,我将所得数据做成表格分析,下同)数据规模:1000020000300004000050000耗时(ms)158634142425413953表1、选择排序在不同数据规模下排序所消耗的时间图7、由表1数据整合而成的折线图WORD格式专业整理图形上:形状基本符合n2(二次增长)数据上:我们发现当数据规模增大两倍时:当数据规模增大两倍时:10000→20000:1588、*22=632≈63410000→30000:158*32=1422≈142420000→40000:634*22=2536≈2541其他倍数也可得到类似的结果。结论:我们发现,由于时间复杂度是o(n2)并且该排序的主要操作是比较操作,当数据规模扩大n倍时,相应的在时间的消耗上会扩大n2倍,同时我们发现,理论上乘以n2后的数据普遍会略小于实际数据,这主要原因可能是除了比较
6、;quick(ele,left,l-1)//递归调用quick(ele,l+1,right)WORD格式专业整理图4、快速排序在不同数据规模下排序所消耗的时间5、插入排序代码5:fori=1→n-1ifele[i]tempele[j+1]←ele[j]ele[j+1]←temp图5、插入排序在不同数据规模下排序所消耗的时间WORD格式专业整理三.实验分析选择排序:图6、由图1数据整合而成的折线图为了更清晰的看到排序的数据规模与排序所需
7、时间之间的影响,我将实验的数据规模进行了一些调整,得到的平均数据依旧是以20组数据样本取平均数算得(如下表1、图7所示):(由于图片占空间大且表达不直白,我将所得数据做成表格分析,下同)数据规模:1000020000300004000050000耗时(ms)158634142425413953表1、选择排序在不同数据规模下排序所消耗的时间图7、由表1数据整合而成的折线图WORD格式专业整理图形上:形状基本符合n2(二次增长)数据上:我们发现当数据规模增大两倍时:当数据规模增大两倍时:10000→20000:158
8、*22=632≈63410000→30000:158*32=1422≈142420000→40000:634*22=2536≈2541其他倍数也可得到类似的结果。结论:我们发现,由于时间复杂度是o(n2)并且该排序的主要操作是比较操作,当数据规模扩大n倍时,相应的在时间的消耗上会扩大n2倍,同时我们发现,理论上乘以n2后的数据普遍会略小于实际数据,这主要原因可能是除了比较
此文档下载收益归作者所有