C++ 数据排序的课程设计报告.docx
- 文档编号:6507371
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:22
- 大小:132.25KB
C++ 数据排序的课程设计报告.docx
《C++ 数据排序的课程设计报告.docx》由会员分享,可在线阅读,更多相关《C++ 数据排序的课程设计报告.docx(22页珍藏版)》请在冰豆网上搜索。
C++数据排序的课程设计报告
淮阴工学院
C++程序设计课程设计报告
选题名称:
数据排序
系(院):
计算机工程系
专业:
计算机科学与技术
班级:
姓名:
学号:
指导教师:
学年学期:
2008~2009学年第2学期
2009年6月1日
设计任务书
课题
名称
数据排序
设计
目的
1.调研并熟悉数据排序的基本概念、排序算法与工作规程;
2.学习VisualC++中的图形化界面设计技术;
3.通过实际编程加深对基础知识的理解,提高实践能力;
4.学习开发资料的收集与整理,学会撰写课程设计报告。
实验
环境
1.微型电子计算机(PC);
2.安装Windows2000以上操作系统,VisualC++6.0开发工具。
任务
要求
1.利用课余时间去图书馆或上网查阅课题相关资料,深入理解课题含义及设计要求,注意材料收集与整理;
2.在第15周末之前完成预设计,并请指导教师审查,通过后方可进行下一步工作;
3.本课题主要实现能用各种排序算法实现对数据的排序,排序后显示排序结果。
4.结束后,及时提交设计报告(含纸质稿、电子稿),要求格式规范、内容完整、结论正确,正文字数不少于3000字(不含代码)。
工作进度计划
序号
起止日期
工作内容
1
2009.05.25~2009.05.30
在预设计的基础上,进一步查阅资料,完善设计方案,形成书面材料。
2
2009.06.1~2009.06.2
设计总体方案,构建、绘制流程框图,编写代码,上机调试。
3
2009.06.3~2009.06.4
测试程序,优化代码,增强功能,撰写设计报告。
4
2009.06.5
提交软件代码、设计报告,参加答辩,根据教师反馈意见,修改、完善设计报告。
指导教师(签章):
年月日
摘要:
所谓排序就是将已知的n个数据按关键字的大小递增或递减重新排列,排序是数据处理中经常使用的重要运算。
排序的算法很多,不同的算法有不同的优缺点,没有哪种算法在任何情况下都是好的。
按策略划分,内部排序方法可以分为五类:
插入排序.选择排序.交换排序.归并排序等。
几乎所有排序都有两个基本的操作:
(1)关键字大小的比较。
(2)改变记录的位置。
具体的处理方式依赖于记录的存储方式,对于顺序型记录,一般移动记录本身,而链式存储的记录通过改变指向记录的的指针实现重定位。
关键字:
插入排序;选择排序;交换排序;归并排序;for循环;switchcase;
1课题综述
1.1课题来源与意义
这个课题使用循环.调用等方面的知识。
能充分调动我们对C++的学习兴趣。
排序在计算机科学中有重要的地位,我想选择它对我以后进一步学习会很有帮助。
1.2预期目标
进入界面后,自动生成100个随机数,用四种不同方法运算输出排序后的数据
1.3面对的问题及需解决的关键技术
问题关键在于如何对数据进行处理,并按照一定的大小来排序。
并且在不同界面下可以相互切换,这就要求要用到switchcase语句。
在数据的处理时要不能改变数据的大小,只能改变他们的位置,所以要用到数组来存储和转移数据而不改变他们的大小。
2系统分析与设计
2.1涉及的基础知识与解决问题的基本思路
C++知识:
循环语句、开关语句、选择语句、数组、函数、break语句
1.循环语句
(1)for()语句
for()循环语句的一般格式为:
for(<表达式1>;<表达式2>;<表达式3>)S;
其中,三个表达式都可以是C++中的任一符合语法规则的表达式;语句S可以是任一C++的语句。
同样地将语句S称为for()的内嵌语句,并把称为循环体。
for()语句的执行过程如下;首先计算“表达式1”(循环初值),且仅计算一次。
每一次循环之前计算“表达式2”(循环条件),如果其结果为真,则执行“语句”S,并计算“表达式3”(循环增量)。
否则,循环终止。
(2)do…while()语句
do…while()语句的一般格式为:
do
while(<表达式>);
do…while()语句的执行过程如下:
先执行语句S,然后再判断表达式的值;若表达式的值不为0,则继续执行循环体,直到表达式的值为0为止。
2.开关语句
开关语句switch语句,它也称为多选择语句。
它可以根据给定的条件,从多个分支语句序列中选择执行一个分支的语句序列。
switch语句的一般格式为:
switch(表达式)
{
case常量表达式1:
语句;
case常量表达式2:
语句;
……
case常量表达式n:
语句;
default:
语句;
}
switch语句的执行过程如下:
首先计算“表达式”的值,然后,其结果值依次与每一个常量表达式的值进行匹配。
如果匹配成功,则执行该常量表达式后的语句系列。
当遇到break时,则立即结束switch语句的执行,否则,顺序执行到花括号的最后一条语句。
3.选择语句(多分支)
现实生活中的各种条件是很复杂的,在一定条件下,又需要满足其他的条件才能确定相应的动作。
为此,C++提供了if语句能够出现在另一个if语句或if-else语句里。
嵌套if语句有两种形式。
一种是嵌套在else分支中,格式为:
if(表达式1)语句1;
elseif(表达式2)语句2;
elseif…
else语句n;
第2种是嵌套在if分支中,格式为:
if(表达式1){
if(表达式2)语句1;
else语句2;
}
else语句3;
4.数组
数组是有限个同类型元素的有序集合,这些元素有一个共同的名字,每个元素以其在数组中的位置来区分,位置用下标表示。
数组有一维数组与多维数组之分,在程序中仅使用了二维数组。
二维数组的定义格式为:
类型说明符数组名[常量表达式1][常量表达式2];
“类型说明符“指定数组元素的类型,“数组名”的命名规则与变量一样,方括号中的“常量表达式1”代表了二维数组的行数,“常量表达式2”代表了二维数组的列数。
行列下标都是从零开始,其最大下标均比常量表达式的值小1。
5.函数
函数定义的一般形式如下:
返回类型函数名([参数表])
{
语句块
return;
}
函数定义包括以下一个部分:
函数名:
函数名与变量名的定义规则一样,但应尽可能反映函数的功能,常常由几个单词组成。
参数表:
用于向函数传送数值或从函数带回数值。
每一个参数都有自己的类型。
函数可以有一个或多个参数变量,也可以没有参数。
如果没有参数,称为:
无参“函数。
函数体:
花括号中的语句块称为函数体。
一个函数的功能,通过函数体中的语句来完成。
返回类型:
指定函数用return返回的函数值的类型。
如果函数没有返回值,返回类型应为void。
6.break语句的一般格式:
break;
该语句只能用于switch语句或循环语句中,其功能是:
第一;在switch语句中,结束开关语句的执行,并把控制转移到该开关语句之后的第一条语句,且开始执行该语句。
第二;在循环语句中的作用是,跳出循环,并执行循环语句后的第一个语句。
2.2总体方案和功能模块框图
利用switchcase语句根据输入的代表不同功能的数字来用不同的方法处理数据。
输入数字1时用插入排序处理数据;输入数字2时用选择排序法处理数据;输入数字3时用交换排序法处理数据;输入数字4时用归并排序法处理数据;输入数字0时退出程序。
并且利用函数调用来处理,每一种处理方法都适用一个或多个函数,处理后都要输出处理后的数据。
2.3实现方法与详细流程
1定义一个全局的a[100];用来存储数据,又定义了6个函数通过主函数由switchcase语句调用其中的几个函数,其中的函数再调用输出函数display();每个排序运行过之后都输出数据。
详细流程:
1.插入排序:
直接插入排序(insert)
基本思想是:
每次将一个待排序的数据记录,按其关键字大小插入到前面已经排好序的记录中集中,使记录依然有序,直到所有待排序记录全部插入完成。
假设待排序数据存放在数组a[1..n]中,则a[i]可以可以看做是一个有序数列,让i从2开始,依次将a[i]插入到有序序列a[1..i-1]中,a[1..n]成为有序序列。
1.若设待排序的对象个数为curremtsize=n,则该算法的主程序执行n-1趟。
2.关键码比较次数和对象移动次数与对象关键码的初始排列有关。
3.最好情况下,排序前对象已经按关键码大小从小到大有序,每趟只需与前面的有序对象序列的最后一个对象的关键码比较1次,移动2次对象,总的关键码比较次数为n-1,对象移动次数为2(n-1)。
4.最坏情况下,第i趟时第i个对象必须与前面i个对象都做关键码比较,并且每做1次比较就要做1次数据移动。
则总的关键码比较次数KCN和对象移动次数RMN分别为
5.若待排序对象序列中出现各种可能排列的概率相同,则可取上述最好情况和最坏情况的平均情况。
在平均情况下的关键码比较次数和对象移动次数约为n2/4。
因此,直接插入排序的时间复杂度为o(n2)。
6.直接插入排序是一种稳定的排序方法。
示例代码
voidinsert(inta[],intn)//插入排序
{
cout<<"插入排序:
"< inttemp; for(inti=1;i { intj=i; temp=a[i];//先把a位置的数据存起来 while(j>0&&temp { a[j]=a[j-1]; j--; } a[j]=temp; } display(); } 2.选择排序: 基本思想是: 每次选出第i小的记录,放在第i个位置(i的起点是0,按此说法,第0小的记录实际上就是最小的,有点别扭,不管这么多了)。 当i=n-1时就排完了。 直接选择排序 示例代码 voidselect(inta[],intn)//选择排序 { cout<<"选择排序: "< inti,j; for(i=0;i { intmin=i; for(j=i+1;j { intt; if(a[j] { min=j; if(min! =i) { t=a[i]; a[i]=a[min]; a[min]=t; } } } } display(); } 3.交换排序: 交换排序的基本思想是: 两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。 冒泡排序 冒泡排序的基本思想是: 依次比较相邻的两个数,将大数放在前面,小数放在后面。 即首先比较第1个和第2个数,将大数放前,小数放后。 然后比较第2个数和第3个数,将大数放前,小数放后,如此继续,直至比较最后两个数,将大数放前,小数放后,此时第一趟结束,在最后的数必是所有数中的最小数。 重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再大于第2个数),将大数放前,小数放后,一直比较到最小数前的一对相邻数,将大数放前,小数放后,第二趟结束,在倒数第二个数中得到一个新的最小数。 如此下去,直至最终完成排序。 由于在排序过程中总是大数往前放,小数往后放,相当于气泡往上升,所以中冒泡排序。 用二重循环实现,外循环变量设为i,内循环变量设为j。 外循环重复9次,内循环依次重复9,8,...,1次。 每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,9,对于每一个i,j的值依次为1,2,...10-i。 示例代码 voidchange(inta[],intn)//交换排序 { cout<<"交换排序: "< inti,j,t;//定义循环变量和交换中间变量 for(i=0;i { for(j=0;j { if(a[j]>a[j+1])//比较大小 { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } display(); } 4.归并排序: 归并操作 归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。 算法描述 归并操作的工作原理如下: 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列 设定两个指针,最初位置为别为两个已经排序序列的起始位置 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置 重复步骤3直到某一指针达到序列尾 将另一序列剩下的所有元素直接复制到合并序列尾 示例代码: voidmerge(inta[],intl,intm,intr)//归并 { int*temp=newint[50]; inti=l,j=m+1,k=0; while((i<=m)&&(j<=r)) { if(a[i]<=a[j]) temp[k++]=a[i++]; else temp[k++]=a[j++]; while(i<=m) temp[k++]=a[i++]; while(j<=r) temp[k++]=a[j++]; for(i=0,k=l;k<=r;) a[k++]=temp[i++]; } } voidMergeSort(inta[],intn) { intleft,right,mid,size=1; while(size { left=0; while(left+size { mid=left+size-1; if(mid+size>n-1) right=n-1; else right=mid+size; merge(a,left,mid,right); left=right+1; } size*=2; } display(); } 3代码编写 #include #include inta[50];//定义一个公共数组 voiddisplay()//输出函数 { intk=1; for(inti=0;i<50;i++) { if(k! =10) { k++; cout< } else { k=1; cout< } } } voidinsert(inta[],intn)//插入排序 { cout<<"插入排序: "< inttemp; for(inti=1;i { intj=i; temp=a[i];//先把a位置的数据存起来 while(j>0&&temp { a[j]=a[j-1]; j--; } a[j]=temp; } display(); } voidselect(inta[],intn)//选择排序 { cout<<"选择排序:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 数据排序的课程设计报告 数据 排序 课程设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)