算法分析与复杂性理论实验报告基本排序要点.docx

算法分析与复杂性理论实验报告基本排序要点.docx

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法分析与复杂性理论实验报告基本排序要点

深 圳 大 学 实 验 报 告课程名称:算法设计与分析实验名称:多种排序算法的算法实现及性能比较学院:计算机与软件学院专业:计算机科学与技术报告人:张健哲学号:2013150372班级:3同组人:无指导教师:李炎然实验时间:2015/3/25——2015/4/8 实验报告提交时间:2015/4/8教务处制一.实验目的掌握选择排序、冒泡排序、合并排序、快速排序、插入排序算法原理掌握不同排序算法时间效率的经验分析方法,验证理论分析与经验分析的一致性。二.实验步骤与结果实验总体思路:利用switch结构来选择实验所要用的排序算法,每一种排序都用相同的计算运行时间的代码,不同的算法就在算法实现部分进行改动(如下代码1至5所示)。不断的改变数据规模,每一个规模在实验时,用循环进行多次实验并作为样本记录消耗的时间。最后输出在不同排序算法下,不同的数据规模的20次实验样本和平均用时(如下图1至5所示)。各排序算法的实现及实验结果:(注1:以下代码全部为伪代码,具体代码实现请参照程序中的代码)(注2:图中显示的时间单位均为毫秒,图中“排序所花时间”一项为平均消耗时间,平均消耗时间结果以20组样本计算平均值后取整得到(并非四舍五入)。)1、选择排序代码1:for i=0 ton-2min=ifor j= i+1ton-1if ele[min]ele[j] min=jswap(ele[i],ele[min]) //交换 图1、选择排序在不同数据规模下排序所消耗的时间2、冒泡排序代码2:for i= 0 to n-1for j=0 ton-1-iif a[j]a[j+1]swap(a[j],a[j+1])//交换图2、冒泡排序在不同数据规模下排序所消耗的时间3、合并排序代码3:Merge(ele[1...n],left,right)middle=(left+right)/2if right1eft+1Merge(ele,left,middle)Merge(ele,middle+1,right)l←left r←right i←leftwhile l=middler=right//两组分别一一比较,数据小的放入eleif ele[l]=ele[r]t[i++]←ele[l++]elset[i++]←ele[r++]while lmiddler=r//只剩一组还有剩余的时,将剩下的按顺序放入 ele[i++]=s[r++]while l=middle rright ele[i++]=s[l++];图3、合并排序在不同数据规模下排序所消耗的时间4、快速排序代码4:quick(ele[0...n-1],left,right)if lrl←left r←right x←ele[l];while lr while lr x=ele[r] //找到一个比x小的数之后交换到前面的部分r--if lr ele[l]←ele[r] l++while lr xele[l] //与上面相反ll++if lrele[r]←ele[l] r--ele[l]←x;quick(ele,left,l-1)// 递归调用quick(ele,l+1,right)图4、快速排序在不同数据规模下排序所消耗的时间5、插入排序代码5:for i=1→n-1if ele[i]ele[i-1]temp=ele[i]for j= i-1to0 ele[j]tempele[j+1]←ele[j]ele[j+1]←temp图5、插入排序在不同数据规模下排序所消耗的时间三.实验分析选择排序:图6、由图1数据整合而成的折线图为了更清晰的看到排序的数据规模与排序所需时间之间的影响,我将实验的数据规模进行了一些调整,得到的平均数据依旧是以20组数据样本取平均数算得(如下表1、图7所示):(由于图片占空间大且表达不直白,我将所得数据做成表格分析,下同)数据规模:1000020000300004000050000耗时(ms)158634142425413953表1、选择排序在不同数据规模下排序所消耗的时间图7、由表1数据整合而成的折线图图形上:形状基本符合n2(二次增长)数据上:我们发现当数据规模增大两倍时:当数据规模增大两倍时:10000→20000: 158*22=63230000:158*32=1422≈142420000→40000: 634*22=2536≈2541其他倍数也可得到类似的结果。结论:我们发现,由于时间复杂度是o(n2)并且该排序的主要操作是比较操作,当数据规模扩大n倍时,相应的在时间的消耗上会扩大n2倍,同时我们发现,理论上乘以n2后的数据普遍会略小于实际数据,这主要原因可能是除了比较操作之外,赋值操作也随着n的增加逐渐增大,并且会在时

文档评论(0)

ee88870 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档