- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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,这样就相当于
跳过了中值。一开始没有仔细领会这一点,导致排序顺序不对。
解决
您可能关注的文档
最近下载
- 22G101与16G101钢筋平法图集对比变化汇总.docx VIP
- 标准图集-08S305 小型潜水排污泵选用及安装.pdf VIP
- 佳木斯电机说明书.pdf VIP
- 农民工工资结算单(参考模板).docx VIP
- 《基孔肯雅热诊疗方案(2025年版)》.pdf VIP
- 《蒸汽冷凝水及二次蒸汽回收技术要求》编制说明.pdf VIP
- 真太阳时调-全国各地详细时差.doc VIP
- CADENCE应用---HDL原理图+Allegro基本操作.pdf VIP
- 2025年中考物理总复习专题十四 欧姆定律.pptx VIP
- 2025至2030年中国抬头显示器(HUD)行业市场调研分析及投资战略规划报告.docx
文档评论(0)