ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:300.40KB ,
资源ID:7829989      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7829989.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计侯亚兵.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计侯亚兵.docx

1、数据结构课程设计侯亚兵数据结构课 程 设 计 报 告 书题 目: 快速排序算法性能分析 系 别: 计算机科学与应用系 学 号: 081006211 学生姓名: 侯亚兵 指导教师: 刘双红 完成日期: 2010.6.10 快速排序算法性能分析1. 需求分析 首先,要求能够自动随机生成50、100、500、1000、5000、10000个数据,这些数据用数组aN存储并输出到屏幕上,同时把这些数据写入文件中,以供与输出相比较看是否排序正确。 其次,程序对数组aN进行快速排序,并且要记录快速排序运算运行的时间。 最后,输出部分将经过快速排序后的数组aN和快速排序运算运行时间格式化输出并且写入文件。2.

2、 概要设计程序流程如图1所示: 图13. 详细设计 采用VC+作为开发工具,用数组来存储随机产生的无序随机数,方便对其进行快速排序,排序后仍用数组存储并输出。3.1 产生随机数并存储到数组aN中用rand函数产生一定个数的随机数,用srand设置rand()随机序列种子,以防总是产生相同的随机数。把产生的随机数用数组aN存储起来并输出,以便于进行接下来的快速排序和排序前后的对照。并且把成的数据写入到文件中方便查看和对照。代码如下:int i,N=1;FILE *fp=fopen(123.txt,w+);srand( time(NULL) );printf(请输入你要生成的随机数个数N的值(0=

3、N=10000),输入0表示退出程序:); scanf(%d,&N);for( i = 0; i N; i+ ) ai=rand();printf(产生的%d个随机数为:n,N);fprintf(fp,产生的%d个随机数为:n,N);for(i=0;iN;i+) printf( %10d,ai); fprintf(fp, %d,ai); 3.2 快速排序算法的实现快速排序(Quick Sort)是对起泡排序的一种改进。它的基本思想是,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。假设待排序列为

4、a0,a1,aN-1,首先任意选取一个记录(通常可选第一个记录a0)作为枢轴(pivot),然后按下述原则重新排列其余记录:将所有关键字较它小的记录都安置在它的位置之前,将所有关键字较它大的记录都安置在它的位置之后。由此可以该“枢轴”记录最后所落的位置i作为分界线,将上述序列分割成两个子序列a0,a1,ai-1和ai+1,ai+2,aN-1,这是一趟快速排序。一趟快速排序的具体做法是:附设两个记录low1和high1,它们的初始值分别为low1=a0和high1=aN-1,设枢轴记录的关键字为pivotkey,则首先从high1所指位置向前搜索找到第一个关键字小于pivotkey的记录和枢轴记

5、录互相交换,并且low1=low1+1,然后从low1所指位置起向后搜索,找到第一个关键字大于pivotkey的记录和枢轴记录互相交换,并且high1=high1-1,重复这两直至low1=high1为止。然后当alow1=pivotkey,返回low1的值。即把序列分割成了两个子序列。然后在分别对分割所得的两个子序列进行递归形式快速排序算法。最后即可得到一个有序的序列。具体代码如下:int a10001;int Partition(int low1,int high1) int p,q; int pivokey=alow1; while(low1high1) while(low1=pivok

6、ey) high1-; if(low1high1) p=alow1; alow1=ahigh1; ahigh1=p; low1=low1+1; while(low1high1&alow1=pivokey) low1+; if(low1high1) q=ahigh1; ahigh1=alow1; alow1=ahigh1; high1=high1-1; alow1=pivokey; return low1;void QSort(int low2,int high2) int pivotloc; if(low2high2) pivotloc=Partition(low2,high2); QSort

7、(low2,pivotloc-1); QSort(pivotloc+1,high2); 3.3 统计算法的执行时间用时间函数clock进行时间的记录,在快速排序前记录一个时间值,在算法结束后在记录一个时间值,这两个时间值的差即为快速排序算法的执行时间。具体代码如下:clock_t begin,end; /省略号代表快速排序过程代码begin=clock();end=clock();printf(The time was:%lf seconds!n ,(double)(end-begin)/CLOCKS_PER_SEC);4. 调试分析在设计过程中主要遇到下列问题:(1) 每次生成的随机数都是相

8、同的。通过查阅c语言函数库得知可以用srand函数设置rand()随机序列种子,从而防止总是产生相同的随机数。(2) 记录算法执行时间的问题。通过和同学探讨得知用时间函数clock()可以记录程序开始和结束时的时间值,两个时间值的差即为程序运行所用时间。(3) 输出数据格式混乱。通过多次尝试得知以%10d的格式进行输出,输出的数据以右对齐的格式进行输出,位数不足的在数据左方以空格补齐。5. 测试结果下面是我的测试函数及运行结果:#include stdafx.h#include stdio.h#include stdlib.h#include time.hint a10001;int Part

9、ition(int low1,int high1) int p,q; int pivokey=alow1; while(low1high1) while(low1=pivokey) high1-; if(low1high1) p=alow1; alow1=ahigh1; ahigh1=p; low1=low1+1; while(low1high1&alow1=pivokey) low1+; if(low1high1) q=ahigh1; ahigh1=alow1; alow1=ahigh1; high1=high1-1; alow1=pivokey; return low1;void QSor

10、t(int low2,int high2) int pivotloc; if(low2high2) pivotloc=Partition(low2,high2); QSort(low2,pivotloc-1); QSort(pivotloc+1,high2); int main(int argc, char* argv) int i,N=1; FILE *fp=fopen(123.txt,w+); clock_t begin,end; srand( time(NULL) ); while(N!=0) printf(请输入你要生成的随机数个数N的值(0=N=10000),输入0表示退出程序:);

11、 scanf(%d,&N); if(N!=0) for( i = 0; i N; i+ ) ai=rand(); printf(产生的%d个随机数为:n,N); fprintf(fp,产生的%d个随机数为:n,N); for(i=0;iN;i+) printf( %10d,ai); fprintf(fp, %d,ai); fprintf(fp,n); fprintf(fp,n); printf(n); printf(n); begin=clock(); QSort(0,N-1); printf(排序后的%d个随机数为:n,N); fprintf(fp,排序后的%d个随机数为:n,N); for

12、(i=0;iN;i+) printf( %10d,ai); fprintf(fp, %d,ai); fprintf(fp,n); fprintf(fp,n); printf(n); end=clock(); printf( The time was:%lf seconds!n ,(double)(end-begin)/CLOCKS_PER_SEC); fprintf( fp,The time was:%lf seconds!n ,(double)(end-begin)/CLOCKS_PER_SEC); else if(N=0) exit(0); fclose(fp); return 0;测试结

13、果如图2、图3、图4、图5、图6和图7所示:图2图3图4图5图6图7其中图2表示:对50个随机数快速排序所用时间为0.008秒其中图3表示:对100个随机数快速排序所用时间为0.019秒其中图4表示:对500个随机数快速排序所用时间为0.117秒其中图5表示:对1000个随机数快速排序所用时间为0.134秒其中图6表示:对5000个随机数快速排序所用时间为0.658秒其中图7表示:对10000个随机数快速排序所用时间为1.309秒6. 时间统计图如图8所示:图8图8表示:对50个随机数快速排序所用时间为0.008秒 对100个随机数快速排序所用时间为0.019秒 对500个随机数快速排序所用时

14、间为0.117秒对1000个随机数快速排序所用时间为0.134秒 对5000个随机数快速排序所用时间为0.658秒对10000个随机数快速排序所用时间为1.309秒运行环境:hp笔记本 处理器:Intel(R) Core(TM)2 Duo CPU T6500 2.10GHz 2.10GHz 内存(RAM):2.0GB 操作系统:win77. 总结经过数据结构课程设计,并且通过对该程序的编译、调试和运行,使我更好的掌握了快速排序的算法以及快速排序的性能,熟悉了各种调用的数据类型,在调试和运行过程中使我更加的了解和熟悉了程序运行的环境,提高了我对程序调试分析的能力和对错误的纠正能力。这次数据结构课程设计也考验了我对数据结构的掌握以及编写程序的能力,使我更加清楚的认识到了自己的能力和不足,使我在今后的学习生活当中知道了该去学习和掌握哪些知识,消除了学习的盲目性,同时也找到了学习的目标。总的来说,通过这次数据结构课程设计,提高了我思考问题、分析问题、解决问题的能力以及自己主动学习和研究问题的能力。这对我以后的学习和工作都是有很大的帮助的。指导教师评语: 程序成绩: 报告成绩: 综合成绩: 指导教师姓名: 批 改 日 期: 年 月 日

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1