武汉理工课程设计封面.docx
- 文档编号:4301888
- 上传时间:2022-11-29
- 格式:DOCX
- 页数:18
- 大小:124.36KB
武汉理工课程设计封面.docx
《武汉理工课程设计封面.docx》由会员分享,可在线阅读,更多相关《武汉理工课程设计封面.docx(18页珍藏版)》请在冰豆网上搜索。
武汉理工课程设计封面
课程设计任务书
学生姓名:
XX专业班级:
计算机科学与技术
指导教师:
XX工作单位:
计算机科学系
题目:
快速排序与冒泡排序算法比较
初始条件:
试分别实现冒泡排序和非递归形式的快速排序算法,并通过随机数据比较两种排序算法中关键字的比较次数和移动次数。
(1)待排序表的表长不小于100;其中的数据要用伪随机数产生程序产生;至少要用5组不同的输入数据作比较;比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换计为3次移动)。
(2)最后要对结果作出简单分析,包括对各组数据得出结果波动大小的解释。
(3)对冒泡排序应指出进行了多少趟。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
课程设计报告按学校规定格式用A4纸打印(书写),并应包含如下内容:
1.问题描述
简述题目要解决的问题是什么。
2.设计
存储结构设计、主要算法设计(用类C/C++语言或用框图描述)、测试用例设计;
3.调试报告
调试过程中遇到的问题是如何解决的;对设计和编码的讨论和分析。
4.经验和体会(包括对算法改进的设想)
5.附源程序清单和运行结果。
源程序要加注释。
如果题目规定了测试数据,则运行结果要包含这些测试数据和运行输出。
说明:
1.设计报告、程序不得相互抄袭和拷贝;若有雷同,则所有雷同者成绩均为0分。
2.凡拷贝往年任务书或课程设计充数者,成绩一律无效,以0分记。
时间安排:
1、6月15日~6月21日完成。
2、6月22日上午和下午在实验中心检查程序、交课程设计报告、源程序(U盘)。
指导教师签名:
2012年6月14日
系主任(或责任教师)签名:
年月日
目录
1问题分析和任务定义...........................3
2.开发平台......................................3
3.程序设计......................................3
4.调试结果与运行情况分析........................6
5.自我评价与总结................................12
6.课程设计参考资料..............................12
1.问题分析和任务定义
1.1问题分析
编程实现快速、冒泡两种排序算法,两者之间的算法好坏比较主要有两个方面:
数据比较次数和数据移动次数。
在该程序中,首先对两种排序算法进行实现,然后再进行比较。
1.2任务定义
1.2.1冒泡排序定义
冒泡排序又称起泡排序,它也是一种简单实用的排序方法。
其基本思想是通过相邻记录之间关键字的比较和交换,使关键字值较小的记录逐渐的从底部移向顶部,即从下标较大的单元移向下标较小的单元,就像水底的气泡一样逐渐向上冒;而关键字较大的记录就像石块往下沉一样,每一趟有一块“最大”的石头沉到水底。
1.2.2快速排序定义
快速排序也叫做分区排序,是目前应用最广泛的排序算法。
它采用分治法进行排序。
其基本思想是任取待排序元素序列中的某个元素(例如取第一个元素)作为基准,按照该元素的排序码大小,将整个元素序列划分为左右两个子序列;左侧子序列中所有元素的排序码都小于基准元素的排序码,右侧子序列中所有元素的排序码都大于或等于基准元素的排序码,基准元素则排在这两个子序列中间。
然后分别对这两个子序列重复实行上述方法,直到所有的元素都排在相应的位置上为止。
2.开发平台
操作系统:
MicrosoftWindows7
开发工具:
MicrosoftVisualC++6.0
语言选择:
C++高级程序语言
3.程序设计
3.1冒泡排序
voidBSort(int*a,intn,int&number,int&move)//冒泡排序
{//number,move用于记录关键字的比较和移动次数
inti,j,temp;
intflag;
for(i=1;i<=n-1;i++)
{
flag=0;
j=n;
while(j>=i+1)
{
if(a[j] { temp=a[j]; a[j]=a[j-1]; a[j-1]=temp; flag=1;//如果有记录交换发生,则置交换标志为1 move+=3;//关键字移动次数加3 } number++;//执行if语句,比较次数加1 j--; } if(flag==0)break;//如果无记录交换发生,则退出循环 } cout<<"完成冒泡排序后的序列为: "< for(i=1;i<=n;i++) { cout< if(i%10==0)cout< } } 3.3快速排序 voidQSort(int*a,intn,int&number,int&move)//快速排序 {//number,move用于记录关键字的比较和移动次数 stacksp; number=0,move=0; Parampm; for(;;){ if(n<=2)//不超过两个数据就处理完毕 { if(n==2&&a[1] { number++; swap(a,a+1); move+=3; } if(sp.empty())break;//如果栈中没有待排序数据就退出 pm=sp.top();//如果栈中有待排序数据就取出最后入栈的一段 sp.pop(); a=pm.a; n=pm.n; continue; } inttemp=*a;//以现在最前面的数据作为分界值 int*l=a+1;//左边第二个数据 int*r=a+n-1;//右边最后一个数据 while(l { while(l { l++; number++; } number++; while(r>a&&*r>=temp)//不小于分界值的留在右边,遇到小于的停止 { r--; number++; } number++; if(l move+=3; } if(*a>*r) swap(a,r);//把分界值交换回中间位置 move+=3; pm.a=r+1,pm.n=n-1-(r-a);//对左右两组分别非递归排序 sp.push(pm); n=r-a; } } 4.调试结果与运行情况分析 4.1函数的调用关系图反映了演示程序的层次结构 主程序 srandBSortQSort rand swapemptytoppoppush 4.2调试过程中出现的问题 在实验过程中,发现许多容易忽视的问题。 例如,在程序中并没有考虑任务书的要求“待排序表的表长不小于100”,虽然程序可以运行但是却和要求不符;再者就是在快速排序的辅助函数中。 4.3调试程序产生的结果 程序运行界面 4.4运行结果简单分析 有关键字参加的比较次数和关键字的移动次数的对比: 关键字参加比较的次数 第一组 第二组 第三组 第四组 第五组 冒泡排序 4929 5836 5822 5794 5732 快速排序 977 900 880 902 894 关键字的移动次数 第一组 第二组 第三组 第四组 第五组 冒泡排序 7911 7626 7251 8229 8679 快速排序 585 555 624 609 633 冒泡排序关键字比较次数和移动次数都要比快速排序的要高出许多次,所以快速排序速度也要快很多,所以总的来说快速排序要比冒泡排序性能更好一些。 由于冒泡排序中有temp=a[j];a[j]=a[j-1];a[j-1]=temp;所以冒泡排序的关键字移动次数要比比较较次数多一些。 5.自我评价与总结 a)设计出色的地方在于: 实验结果的最后使用了表格,是的实验结果清晰可见,便于分析。 b)设计不好的地方: 最后的结果分析四喜系那个不够透彻,不能够全面的分析实验结果。 c)实验收获: 通过此次试验,我学习到了很多。 例如: 认真阅读课程设计任务书的要求,这样写出来的程序才能符合要求,不至于徒劳无功。 课程设计这种形式真的是我们需要的,可以让我们学到很多,包括书上的、书外的。 理论永远不等于实际。 在学排序算法的时候,读了书上的算法描述,觉得自己都会了,但真的到编程去实现它的时候,总会出点差错,很多小问题都被忽视掉了,只得一次次改,等到程序终于正确运行的时候,才算真正会了这些算法,理论和实际永远差那么一点,不去做是体会不出来的。 坐在电脑前才真正知道自己会不会,眼高手低是要不得的。 在写程序的时候,需要认真的去对待,书本是一个基础,无论什么时候设计都不能脱离书本,只有掌握了书本基础知识,才能更好的完成编程。 在写课程设计任务说明书的时候,要保证说明书条理清晰,让人一目了然,所以就需要有目录和字体粗细大小不一的序号,清楚地标示出来。 6.课程设计参考资料 《数据结构——用面向对象方法与C++语言描述(第二版)》,殷人昆编著,清华大学出版社,出版或修订时间: 2009年9月 附录: 源程序 #include #include #include usingnamespacestd; voidBSort(int*a,intn,int&number,int&move)//冒泡排序 { inti,j,temp; intflag; for(i=1;i<=n-1;i++) { flag=0; j=n; while(j>=i+1) { if(a[j] { temp=a[j]; a[j]=a[j-1]; a[j-1]=temp; flag=1;//如果有记录交换发生,则置交换标志为1 move+=3;//关键字移动次数加3 } number++;//执行if语句,比较次数加1 j--; } if(flag==0)break;//如果无记录交换发生,则退出循环 } cout<<"完成冒泡排序后的序列为: "< for(i=1;i<=n;i++) { cout< if(i%10==0)cout< } } voidswap(int*a,int*b)//通过地址交换两个数据 { intt=*a; *a=*b; *b=t; } structParam { int*a; intn; }; voidQSort(int*a,intn,int&number,int&move)//快速排序 {//number,move用于记录关键字的比较和移动次数 stacksp; number=0,move=0; Parampm; for(;;){ if(n<=2)//不超过两个数据就处理完毕 {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 武汉理工 课程设计 封面