选择法与插入法排序Word格式文档下载.docx
《选择法与插入法排序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《选择法与插入法排序Word格式文档下载.docx(8页珍藏版)》请在冰豆网上搜索。
成绩:
指导教师评语:
指导教师签字:
年月日
1.课程设计目的3
2.课程设计任务与要求3
3.课程设计说明书4
4.课程设计成果6
5.程序调试过程9
6.设计问题的不足和改进方案10
7.课程设计心得10
8.参考文献10
1.课程设计目的
培养学生综合利用C++语言进行程序设计的能力,并培养学生利用MFC在VisualC++中进行可视化编程的能力。
加强学生对面向对象程序设计方法的初步认识,提高软件系统分析能力和程序文档建立、归纳总结的能力,主要是培养学生利用MFC和VisualC++中的可视化编程工具进行Windows程序设计和开发的能力。
2.课程设计任务与要求:
要求:
本次课程设计利用《软件设计基础(C++)》课程中所学到的编程知识和编程技巧,完成具有一定难度和工作量的程序设计题目,帮助学生掌握编程、调试的基本技能,独立完成所布置的任务。
1、对系统进行功能需求分析
2、设计合理的数据结构和系统框架
3、编程简练,程序功能齐全,能正确运行
4、说明书、流程图要清楚
5、课题完成后必须按要求提交课程设计报告
3.课程设计说明书
(1)选择法
算法要求:
用选择法对10个整数按降序排序。
算法分析:
每趟选出一个最值和无序序列的第一个数交换,n个数共选n-1趟。
第i趟假设i为最值下标,然后将最值和i+1至最后一个数比较,找出最值的下标,若最值下标不为初设值,则将最值元素和下标为i的元素交换。
算法特点:
每趟是选出一个最值确定其在结果序列中的位置,确定元素的位置是从前往后,而每趟最多进行一次交换,其余元素的相对位置不变。
可进行降序排序或升序排序。
(2)插入法
用插入排序法对10个整数进行降序排序。
将序列分为有序序列和无序列,依次从无序序列中取出元素值插入到有序序列的合适位置。
初始是有序序列中只有第一个数,其余n-1个数组成无序序列,则n个数需进n-1次插入。
寻找在有序序列中插入位置可以从有序序列的最后一个数往前找,在未找到插入点之前可以同时向后移动元素,为插入元素准备空间。
每趟从无序序列中取出第一个数插入到有序序列的合适位置,元素的最终位置在最后一趟插入后才能确定位置。
也可是先用循环查找插入位置(可从前往后或从后往前),再将插入位置之后的元素(有序列中)逐个后移一个位置,最后完成插入。
该算法的特点是在寻找插入位置的同时完成元素的移动。
因为元素的移动必须从后往前,则可将两个操作结合在一起完成,提高算法效率。
仍可进行升序或降序排序。
Main主函数
和未排序的第一个数交换
将待插入数暂存于变量t中,在有序序列中寻找插入位置
若未找到插入位置,则当前元素后移一个位置;
找到插入位置,完成插入
外循环控制趟数,n个数从第2个数开始到最后共进行n-1次插入
10个整数
插入法
排序完成,
输出
否
找出未排序的数种最小的一个
选择法
4.课程设计成果
选择法:
#include<
iostream>
usingnamespacestd;
voidselect_sort(intarray[],intn)
{
//n为数组元素个数
inti,j,k,temp;
//i为基准位置,j为当前被扫描元素位置,k用于暂存出现的较小的元素的位置
for(i=0;
i<
n;
i++)
k=i;
//初始化为基准位置
for(j=i+1;
j<
j++)
if(array[j]>
array[k])
k=j;
//k始终指示出现的较小的元素的位置
}//for
if(k!
=i)
temp=array[i];
array[i]=array[k];
array[k]=temp;
//将此趟扫描得到的最小元素与基准互换位置
}
cout<
<
array[i];
"
\n"
;
}
intcin_array(inta[],intnum){
请输入数组中的元素个数:
cin>
>
num;
for(inti=0;
i++){
请输入元素:
a[i];
returnnum;
voidmain(){
int*a=newint[];
intn;
n=cin_array(a,n);
//n=sizeof(a)/sizeof(*a);
求变长数组元素的个数,在本程序中,这个函数没用
select_sort(a,n);
插入法:
//输出数组中的每个元素
voidcout_array(inta[],intnum){
a[i]<
"
//定义随即数组
voidinsert_sort(inta[],intnum){//需要选择n-1次
inti,j,temp;
for(i=1;
//暂存下标为i的数,下标从1开始,因为开始时下标为0的数前面没有任何数,此时认为它是排好序的
temp=a[i];
for(j=i-1;
j>
=0&
&
temp>
a[j];
j--)
//如果后面的数比前面的大,就将前面的数移到后面,后面的数移到前面
a[j+1]=a[j];
a[j+1]=temp;
//找到下标为i的数的位置
int*a=newint[];
intnum;
num=cin_array(a,num);
insert_sort(a,num);
cout_array(a,num);
endl;
6.设计问题的不足和改进方案
不足:
首先,此次课程设计要求用c++进行设计,但是整个过程却更偏重于c语言,对于c++中的特有继承等并无涉及,如果将几个函数类似的地方使用集成的方法设计,可以提高程序的性能。
对于各种排序法时间复杂度的统计,输出的是所有排序的元素的比较移动次数,而如果用户只需要看到其中两种或三种排序方法的比较结果,就不能确切的达到用户的要求了。
还有,变量的定义有些乱,有些甚至是赘余的,可以删去。
7.课程设计心得
1.做这次课程设计明显的看出自己的不足,以及自己所学知识的有限,遇到的最大问题就是拿到这个题目无从下手,后来经过老师的教导和自己查找有关资料得以解决。
问题一:
对课程设计的题目的题意不是很清楚。
后来通过和伙伴共同探讨,知道了题目大概要用到什么知识点
2.我觉得可以用类中的派生类做比较好,那样的话,程序的条理比较清晰,并且容易理解。
3.可以扩充的功能可以加上计算员工工资的结算(如按照薪水和奖金以及罚金结算工资),还有可以加上运用运算符重载的功能实现。
我希望我做的课程设计有个美好的界面以及很方面地为广大消费者服务。
可以的话,加上些消遣的小程序也是可以的,同时提供些学习的程序方便学习英语以及其他
8.参考文献
[1]BjarneStroustrup,THEC++PROGRAMMINGLANGUAGE,HigherEducationPressPearsonEducation,2002
[2][美]WalterSavitch著,周靖译,C++面向对象程序设计——基础、数据结构与编程思想,清华大学出版社,2004
[3][美]BrianOverland著,董梁等译,C++语言命令详解,电子工业出版社,2000
[4]陈光明主编,实用VisualC++编程大全,西安电子科技大学出版社,2000
[5][美]BeckZaratian著,VisualC++6.0Programmer’sGuide,北京希望电脑公司,1998
[6][美]JonBates,TimTonpkins著,何健辉等译,实用VisualC++6.0教程,清华大学出版社,2000
[7][美]RobertL.Krusw,AlexanderJ.Ryba著,钱丽萍译,C++数据结构与程序设计,清华大学出版社,2004