




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学 号 数据结构课程设计设计说明书题目各种排序算法时间性能的比较起止日期: 2011年 12月 12 日 至 2011 年 12月16日学生姓名班级成绩指导教师(签字) 电子与信息工程系2011年 12月16日天津城市建设学院课程设计任务书20112012学年第1学期 电子与信息工程 系 软件工程 专业 班级课程设计名称: 数据结构课程设计 设计题目: 各种排序算法时间性能的比较 完成期限:自 2011 年 12 月 12 日至 2011 年 12 月 16 日共 1 周设计依据、要求及主要内容(可另加附页):一、设计目的熟悉各种数据结构和运算,会使用数据结构的基本操作解决一些实际问题。二、设计要求 (1)重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;(2)按照课程设计的题目要求,独立地完成各项任务,严禁抄袭;凡发现抄袭,抄袭者与被抄袭者皆以零分计入本课程设计成绩。凡发现实验报告或源程序雷同,涉及的全部人员皆以零分计入本课程设计成绩;(3)学生在接受设计任务后,首先要按设计任务书的要求编写设计进程表;(4)认真编写课程设计报告。三、设计内容对各种排序方法(直接插入排序、希尔排序、起泡排序、快速排序、直接选择排序、堆排序和归并排序)的时间性能进行比较。(1) 设计并实现上述各种排序算法;(2) 产生正序和逆序的初始排列分别调用上述排序算法,并比较时间性能;(3) 产生随机的初始排列分别调用上述排序算法,并比较时间性能。四、参考文献1王红梅数据结构清华大学出版社2王红梅数据结构学习辅导与实验指导清华大学出版社3严蔚敏,吴伟民数据结构(c语言版)清华大学出版社一、需求分析需要对用户输入的一组数据进行排序,并对7种排序的正逆排序进行分析,并做出时间复杂度的比较,并得出最优的排序方法作为结果。二、问题求解在排序时,开始做出的任何一个排序的的逆排序的时间复杂度都是一个定值不会变,后来经过单步调试,发现是把正排序放在了起之前,所以逆排序排出来的都是已经排好的数据,所以不会变,我通过复制数组,做成了两个数组(最后做成的总程序为多个数组),然后分别对应每个算法做排序。这样就不会在显示后一个算法的排序是前一个算法已经排序好的数组,而是用户输入的原始数组。一下是对于每个排序的分析及所遇见的问题:(排序解释都用正排序说明)1冒泡排序该排序没有什么打的问题,用两个for循环即可做出排序。排序原理是两两对比大的放前,小的放后。2插入排序该排序是以第n个数(需排序的数)直接去与数组里已经排序好的数做比较。将其插入比它大的数之前,比它小的数之后。在做该数组的时候我之前以为r0的哨兵可以用任意一的变量来代替,从而是数组从r0开始计数,结果表明,并不是这样,因为每一次,最小的数都会呗覆盖掉,所以原假设不成立。3希尔排序:先把数组分成等长的两个数组,用ri与rn/2+i做比较晓得在前,打的在后,然后在一刚刚两两一组的两组做比较,就这样,每次比较,每组数的个数都是上一次的两倍,最后完成整个数组的排序。4直接选择排序该排序是现在无序的数组中找最值,然后作为第一个元素,之后就是每次找最值,作为下一个元素,直至最后一个元素,排序完成。5快速排序定义两个指针,分别只想第一个与最后一个元素,这两个元素做比较,大的放前,小的放后,然后移动指针,进行下一个比较。两次这样比较排序以后,数组变成为了有序数列。该算法采用为递归算法。6归并排序该排序,也是需要调用递归。先把数组对半分多次,直到每组只有两个数据时,进行对比、排序。然后再两两合并,最后做到整个数组的排序完成7堆排序先是对堆做比较,左子数小于本数,右子数大于本数,然后不停比较,交换,最后达到整个数组的排序。三、总体设计每一个排序都给出排序后的数组及本排序的时间复杂度。主程序快速排序冒泡排序插入排序希尔排序直接选择排序归并排序堆排序主程序快速排序冒泡排序插入排序希尔排序直接选择排序归并排序堆排序杂乱数组输出整理排序数组,并作出分析,得到最有方法四、详细设计/冒泡排序void zmppx(int a ,int n ) /正序排序void nmppx(int a ,int n ) /逆序排序/插入排序void zcrpx(int r ,int n) /正序排序void ncrpx(int r ,int n) /逆序排序/希尔排序void zxepx(int r ,int n) /正序排序void nxepx(int r ,int n) /逆序排序/直接选择排序void zzjxzpx(int r ,int n) /正序排序void nzjxzpx(int r ,int n) /逆序排序/快速排序void zkspx(int r,int left,int right) /正序排序void nkspx(int r,int left,int right) /逆序排序/归并排序void copy(int r,int b,int l,int g) /复制函数void zmerge(int c,int d,int l,int m,int g) /正排序算法void zgbpx(int r,int left,int right) /正序排序void nmerge(int c,int d,int l,int m,int g) /逆排序算法void ngbpx(int r,int left,int right) /逆序排序/堆排序void zsift(int r,int k,int m) /筛选法调整堆算法(正)void zdpx(int r ,int n) /正序排序void nsift(int r,int k,int m) /筛选法调整堆算法(逆)void ndpx(int r ,int n) /逆序排序/主函数void main() /输入输出五、调试与测试调试用的是简单的黑盒测试,输入数据,给出结果。遇到的问题如“二”所示。六、关键源程序清单和执行结果源程序:#include using namespace std;int mpzl=0,mpnl=0;int crzl=0,crnl=0;int xezl=0,xenl=0;int zjzl=0,zjnl=0;int kszl=0,ksnl=0;int gbzl=0,gbnl=0;int dzl=0,dnl=0;/*/冒泡排序void zmppx(int a ,int n )for(int t=1;t=n;t+)for(int k=1 ;kak+1)int p=ak+1;ak+1=ak;ak=p;mpzl+;mpzl+;mpzl+;void nmppx(int a ,int n )for(int t=1;t0;k-)if(akak+1)int p=ak+1;ak+1=ak;ak=p;mpnl+;mpnl+;mpnl+;/*/插入排序void zcrpx(int r ,int n)for(int i=2; ir0;j-)rj+1=rj;crzl+;rj+1=r0;crzl+;void ncrpx(int r ,int n)for(int i=2; i=n ; i+)r0=ri;for( int j=i-1;rj=1; d=d/2)for(int i=d+1; i0 &r0=1; d=d/2)for(int i=d+1; i0 &r0rj;j=j-d)rj+d=rj;xenl+;rj+d=r0;xenl+;xenl+;/*/直接选择排序void zzjxzpx(int r ,int n)for(int i=1; in ; i+)int m=i;for(int j=i+1;j=n;j+)if(rjrm)m=j;zjzl+;int p;if(n!=i)p=ri;ri=rm;rm=p;zjzl+;zjzl+;void nzjxzpx(int r ,int n)for(int i=1; in ; i+)int m=i;for(int j=i+1;jrm)m=j;zjnl+;int p;if(n!=i)p=ri;ri=rm;rm=p;zjnl+;zjnl+;/*/快速排序void zkspx(int r,int left,int right)int i=left,j=right,p=rleft; while(ij)while(i=p)j-;kszl+;int m=ri;ri=rj; rj=m;kszl+;while(ij&ri=p)i+;kszl+;m=rj;rj=ri;ri=m;kszl+; if(lefti+1) zkspx(r,i+1,right);void nkspx(int r,int left,int right)int i=left,j=right,p=rleft; while(ij)while(ij&rj=p)j-;ksnl+;int m=ri;ri=rj; rj=m;ksnl+;while(i=p)i+;m=rj;rj=ri;ri=m;ksnl+; if(lefti+1) nkspx(r,i+1,right);/*/归并排序int b100;/定义全局变量,存储merge合并时暂时存放排序后的数组元素/真正的排序函数 比较左右两段元素 将较小数字依次暂存数组b中/将数组b暂存的排序后的元素返回数组void copy(int r,int b,int l,int g)for(int i=l;i=g;i+)ri=bi;gbzl+;gbnl+;/正序合并void zmerge(int c,int d,int l,int m,int g)int i=l,j=m+1,k=l;while(i=m)&(j=g)if(cim)for(int q=j;q=g;q+)dk+=cq;gbzl+;elsefor(int q=i;q=m;q+)dk+=cq;gbzl+;/正序合并排序主函数void zgbpx(int r,int left,int right)if(leftright)int i=(left+right)/2; /数组均分成两段zgbpx(r,left,i); /递归对左边数据进行合并排序zgbpx(r,i+1,right); /递归对右边数据进行合并排序zmerge(r,b,left,i,right); /调用排序函数copy(r,b,left,right);/逆序合并void nmerge(int c,int d,int l,int m,int g)int i=l,j=m+1,k=l;while(i=m)&(j=cj)dk+=ci+;gbnl+;elsedk+=cj+;gbnl+;if(im)for(int q=j;q=g;q+)dk+=cq;gbnl+;elsefor(int q=i;q=m;q+)dk+=cq;gbnl+;/逆序合并排序主函数void ngbpx(int r,int left,int right)if(leftright)int i=(left+right)/2; /数组均分成两段ngbpx(r,left,i); /递归对左边数据进行合并排序ngbpx(r,i+1,right); /递归对右边数据进行合并排序nmerge(r,b,left,i,right); /调用排序函数copy(r,b,left,right);/*/堆排序void zsift(int r,int k,int m)int i=k;int j=2*i;while(j=m)if(jm & rjrj)dzl+;break;elseint p=ri;ri=rj;rj=p;dzl+;i=j;j=2*i;void zdpx(int r ,int n)for(int i=n/2; i=1 ; i-)dzl+;zsift(r,i,n);for(i=1; in;i+)int p=r1;r1=rn-i+1;rn-i+1=p;dzl+;zsift(r,1,n-i);void nsift(int r,int k,int m)int i=k;int j=2*i;while(j=m)if(jrj+1)j+;dnl+;if(ri=1 ; i-)dnl+;nsift(r,i,n);for(i=1; in;i+)int p=r1;r1=rn-i+1;rn-i+1=p;dnl+;nsift(r,1,n-i);/*void main()int r1000,mr11000,cr11000,xr11000,zr11000,kr11000,gr11000,dr11000,mr21000,cr21000,xr21000,zr21000,kr21000,gr21000,dr21000;int n;cout请输入排序个数n;cout请输入n个要排序的数整数endl;for(int i=1;iri;for(int k=1;k=n;k+)mr1k=rk;mr2k=rk;cr1k=rk;cr2k=rk;xr1k=rk;xr2k=rk;zr1k=rk;zr2k=rk;kr1k=rk;kr2k=rk;gr1k=rk;gr2k=rk;dr1k=rk;dr2k=rk;zmppx(mr1,n);cout正序排序以后为endl;for(int j=1;j=n;j+)coutmr1jt;coutendl;nmppx(mr2,n);cout逆序排序以后为endl;for( j=1;j=n;j+)coutmr2jt;coutendl;zcrpx(cr1,n);ncrpx(cr2,n);zxepx(xr1,n);nxepx(xr2,n);zzjxzpx(zr1,n);nzjxzpx(zr2,n);zkspx(kr1,1,n);nkspx(kr2,1,n);zgbpx(gr1,1,n);ngbpx(gr2,1,n);zdpx(dr1,n);ndpx(dr2,n);cout冒泡正序排序时间复杂度为mpzl次endl;cout冒泡逆序排序时间复杂度为mpnl次endl;cout*endl;cout插入正序排序时间复杂度为crzl次endl;cout插入逆序排序时间复杂度为crnl次endl;cout*endl;cout希尔正序排序时间复杂度为xezl次endl;cout希尔逆序排序时间复杂度为xenl次endl;cout*endl;cout直接选择正序排序时间复杂度为zjzl次endl;cout直接选择逆序排序时间复杂度为zjnl次endl;cout*endl;cout快速正序排序时间复杂度为kszl次endl;cout快速逆序排序时间复杂度为ksnl次endl;cout*endl;cout归并正序排序时间复杂度为gbzl次endl;cout归并逆序排序时间复杂度为gbnl次endl;cout*endl;cout堆正序排序时间复杂度为dzl次endl;cout堆逆序排序时间复杂度为dnl次endl;cout*endl;int p;if(mpzl=crzl & mpzl=xezl & mpzl=zjzl & mpzl=kszl & mpzl=gbzl & mpzl=dzl)p=1;if(crzlmpzl & crzl=xezl & crzl=zjzl & crzl=kszl & crzl=gbzl & crzl=dzl)p=2;if(xezlmpzl & xezlcrzl & xezl=zjzl & xezl=kszl & xezl=gbzl & xezl=dzl)p=3;if(zjzlmpzl & zjzlcrzl & zjzlxezl & zjzl=kszl & zjzl=gbzl & zjzl=dzl)p=4;if(kszlmpzl & kszlcrzl & kszlxezl & kszlzjzl & kszl=gbzl & kszl=dzl)p=5;if(gbzlmpzl & gbzlcrzl & gbzlxezl & gbzlzjzl & gbzlkszl & gbzl=dzl)p=6;if(dzlmpzl & dzlcrzl & dzlxezl & dzlzjzl & dzlkszl & dzlgbzl)p=7;switch(p)case 1:cout该数列正排序使用冒泡排序最为简便endl;break;case 2:cout该数列正排序使用插入排序最为简便endl;break;case 3:cout该数列正排序使用希尔排序最为简便endl;break;case 4:cout该数列正排序使用直接选择排序最为简便endl;break;case 5:cout该数列正排序使用快速排序最为简便endl;break;case 6:cout该数列正排序使用归并排序最为简便endl;break;case 7:cout该数列正排序使用堆排序最为简便endl;break;int q;if(mpnl=crnl &
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 会计制度设计期末考试题及答案
- 考点解析北师大版8年级数学上册期中试题附答案详解(综合题)
- 解析卷-人教版8年级数学下册《一次函数》重点解析试题(解析卷)
- 押题宝典执业药师资格证之《西药学专业二》模考模拟试题及参考答案详解【模拟题】
- 2025年土壤污染修复技术在土壤修复产品研发中的应用效果与成本效益分析报告001
- 2025年工业互联网平台可信执行环境(TEE)在智能安防系统中的应用分析报告
- 解析卷-北京市朝阳区日坛中学7年级数学下册第四章三角形专题测评试题(含详细解析)
- 2025年学前教育师资队伍教师团队建设与领导力提升报告
- 园林绿化作业人员模考模拟试题附答案详解【模拟题】
- 建材采购合同书要素
- 2025年度制造业员工劳动合同范本
- 2025制衣厂生产合作协议范本
- 无纺布行业知识培训总结
- 2025年秋季教导处工作计划-深耕细作教研路笃行不怠启新程
- 中国象棋教学课件
- 2024象山县辅警招聘考试真题
- 党建品牌创新活动创新路径与实践探索
- 2025年保山辅警考试题库(附答案)
- T∕CAME 1-2019 家庭式产房建设标准
- 冀教版四年级下学期英语阅读理解专项精选练习
- 计算机硬件系统的组成ppt课件
评论
0/150
提交评论