快速排序算法上机报告.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
快速排序算法上机报告

Quicsort上机报告 肖俊青 第一题 1.题目要求 Thisprojectrequiresyouto implementanoptimizedversionofquicksort, and compare the performances of the following combinations: (1)Cutoff values (边界值) from 0 to 1000 (between0 and 1000); (2)Take pivot tobe the 1stelement,random, median of random three, and median of random five. The tests must be done on the following three kinds of inputs: (1) sorted input; (2)reverse-ordered input; (3)random input. The size of input can be taken from 20000 to 100000. The run times must beplottedwithrespecttothesizestoillustratethedifference. (figure out using excel, matlab in the Report) 2.需求分析 题目要求测试在四种中值产生方式(1st.random.Medianof three.random of five)和三种输入方式(Sorted.Reversed.Random)以及不同的输入数据量 (2w~10w)的情况下Quicksort 的运行时间。因为要处理的数据量比较多,因此 考虑使用文本进行数据的传输。 思路:根据三种输入方式分别设计三个输入产生函数CreateSorted和 CreateReverd,CreateRandom分别产生足够数量的随机数并写入到Sorted.txt 和Reversed.txt,Random.txt中。再从相应的文本中读入输出,并进行Quicksort 并计时并输出到result.txt 中。其中的Quicksort 中的Patition 中应支持四种 中值产生方式。 3.源代码分析 分析:源代码中共有5个子函数,其中前两个用于实现Qiucksort (能选择中值方式) 后面3个用于产生输出文件。主函数从文件读入输入并存入缓冲区中,此时计时开始,对缓 冲区中数据进行Quicksort,然后计时结束,然后将排序结果输入到result.txt 中,并在屏幕 上输出Quicksort所花费的时间。 4.实例测试 例子:中值产生方式为Medianofthree,输入方式为Reversed,size为8w。 可以看到Reversed.txt 中已经产生了80000个逆序排列的数 Result.txt 中产生已经被Quicksort排序好的80000个数。说明算法是正确的。 从屏幕看以看到此次Quicksort花费了88毫秒。 5.实际编程中遇到的问题 产生随机数中srand ()的位置问题 要想使用rand ()产生每次不一样的随机数,比较靠谱的做法是用srand()将时间设为 seed,因为每次时间不一样,所以产生的的随机数也都不一样。但是自己一开始将srand() 写在了for循环中,发现产生的随机数都是同一个数,但是单步调试的时候产生的又是不同 的数!真是一个古怪的问题。查阅资料发现srand()的原理是根据seed产生一个表,产生的 随机数从表中顺序产生,这意味着如果seed一样,那么产生的随机数序列是一样的。当将 srand()写在循环中时,因为time()的返回值已秒为单位,所seed都是一样的,每次都输出了 产生的表中的第一个数,因此都是一样的。而单步调试中seed不一样,所以随机数不一样。 解决方法:将srand()置于循环开始前,这样循环就会从表中顺序输出不同的数。 Quicksort中的中值处理问题 书上的Quicksort是将最后一个数选为中值,并且j 的循环只到了size-1,这样就相当于 跳过了中值。一开始没有仔细领会这一点,导致排序顺序不对。 解决

文档评论(0)

docman126 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:7042123103000003

1亿VIP精品文档

相关文档