1、选择法与插入法排序河北联合大学 软件设计基础(C+)课程设计报告设计名称:选择法与插入法排序 姓 名: 学 号:专业班级: 学 院: 设计时间: 设计地点: 计算机中心 成绩:指导教师评语: 指导教师签字: 年 月 日1.课程设计目的 32.课程设计任务与要求 33.课程设计说明书 44.课程设计成果 65.程序调试过程 96.设计问题的不足和改进方案 107.课程设计心得 108.参考文献 101课程设计目的培养学生综合利用C+语言进行程序设计的能力,并培养学生利用MFC在Visual C+中进行可视化编程的能力。加强学生对面向对象程序设计方法的初步认识,提高软件系统分析能力和程序文档建立、
2、归纳总结的能力,主要是培养学生利用MFC和Visual C+中的可视化编程工具进行Windows程序设计和开发的能力。2课程设计任务与要求:要求:本次课程设计利用软件设计基础(C+)课程中所学到的编程知识和编程技巧,完成具有一定难度和工作量的程序设计题目,帮助学生掌握编程、调试的基本技能,独立完成所布置的任务。要求:1、对系统进行功能需求分析2、设计合理的数据结构和系统框架3、编程简练,程序功能齐全,能正确运行4、说明书、流程图要清楚5、课题完成后必须按要求提交课程设计报告3课程设计说明书(1)选择法 算法要求:用选择法对10个整数按降序排序。 算法分析:每趟选出一个最值和无序序列的第一个数交
3、换,n个数共选n-1趟。第i趟假设i为最值下标,然后将最值和i+1至最后一个数比较,找出最值的下标,若最值下标不为初设值,则将最值元素和下标为i的元素交换。算法特点:每趟是选出一个最值确定其在结果序列中的位置,确定元素的位置是从前往后,而每趟最多进行一次交换,其余元素的相对位置不变。可进行降序排序或升序排序。(2)插入法 算法要求:用插入排序法对10个整数进行降序排序。 算法分析:将序列分为有序序列和无序列,依次从无序序列中取出元素值插入到有序序列的合适位置。初始是有序序列中只有第一个数,其余n-1个数组成无序序列,则n个数需进n-1次插入。寻找在有序序列中插入位置可以从有序序列的最后一个数往
4、前找,在未找到插入点之前可以同时向后移动元素,为插入元素准备空间。算法特点:每趟从无序序列中取出第一个数插入到有序序列的合适位置,元素的最终位置在最后一趟插入后才能确定位置。也可是先用循环查找插入位置(可从前往后或从后往前),再将插入位置之后的元素(有序列中)逐个后移一个位置,最后完成插入。该算法的特点是在寻找插入位置的同时完成元素的移动。因为元素的移动必须从后往前,则可将两个操作结合在一起完成,提高算法效率。仍可进行升序或降序排序。Main主函数和未排序的第一个数交换将待插入数暂存于变量t中, 在有序序列中寻找插入位置若未找到插入位置,则当前元素后移一个位置; 找到插入位置,完成插入外循环控
5、制趟数,n个数从第2个数开始到最后共进行n-1次插入10个整数插入法排序完成,输出否找出未排序的数种最小的一个10个整数选择法4课程设计成果选择法:#includeusing namespace std;void select_sort(int array,int n)/ n 为数组元素个数int i,j,k,temp; / i 为基准位置,j 为当前被扫描元素位置,k 用于暂存出现的较小的元素的位置for(i=0;in;i+)k=i;/初始化为基准位置for(j=i+1;jarrayk)k=j;/ k 始终指示出现的较小的元素的位置/forif(k!=i)temp=arrayi;arrayi
6、=arrayk;arrayk=temp;/ 将此趟扫描得到的最小元素与基准互换位置coutarrayi;coutn; int cin_array(int a,int num)coutnum;for(int i=0;inum;i+)coutai;return num;void main()int *a=new int ;int n;n=cin_array(a,n);/n=sizeof(a)/sizeof(*a);求变长数组元素的个数,在本程序中,这个函数没用select_sort(a,n); 插入法:#includeusing namespace std;/输出数组中的每个元素void cout
7、_array(int a,int num)for(int i=0;inum;i+)coutai ;/定义随即数组int cin_array(int a,int num)coutnum;for(int i=0;inum;i+)coutai;return num;void insert_sort(int a,int num)/需要选择n-1次int i,j,temp;for(i=1;i=0 & tempaj;j-)/如果后面的数比前面的大,就将前面的数移到后面,后面的数移到前面aj+1=aj;aj+1=temp;/找到下标为i的数的位置void main()int *a=new int;int n
8、um;num=cin_array(a,num);insert_sort(a,num);cout_array(a,num);coutendl; 6.设计问题的不足和改进方案不足:首先,此次课程设计要求用c+进行设计,但是整个过程却更偏重于c语言,对于c+中的特有继承等并无涉及,如果将几个函数类似的地方使用集成的方法设计,可以提高程序的性能。对于各种排序法时间复杂度的统计,输出的是所有排序的元素的比较 移动次数,而如果用户只需要 看到其中两种或三种排序方法的比较结果,就不能确切的达到用户的要求了。 还有,变量的定义有些乱,有些甚至是赘余的,可以删去。7.课程设计心得1.做这次课程设计明显的看出自己
9、的不足,以及自己所学知识的有限,遇到的最大问题就是拿到这个题目无从下手,后来经过老师的教导和自己查找有关资料得以解决。问题一:对课程设计的题目的题意不是很清楚。后来通过和伙伴共同探讨,知道了题目大概要用到什么知识点2.我觉得可以用类中的派生类做比较好,那样的话,程序的条理比较清晰,并且容易理解。3.可以扩充的功能可以加上计算员工工资的结算(如按照薪水和奖金以及罚金结算工资),还有可以加上运用运算符重载的功能实现。我希望我做的课程设计有个美好的界面以及很方面地为广大消费者服务。可以的话,加上些消遣的小程序也是可以的,同时提供些学习的程序方便学习英语以及其他8.参考文献1 Bjarne Strou
10、strup, THE C+ PROGRAMMING LANGUAGE, Higher Education Press Pearson Education,20022 美Walter Savitch著,周靖译,C+面向对象程序设计基础、数据结构与编程思想,清华大学出版社,20043 美Brian Overland著,董梁等译,C+语言命令详解,电子工业出版社,20004 陈光明主编,实用Visual C+编程大全,西安电子科技大学出版社,20005 美Beck Zaratian著,Visual C+6.0Programmers Guide,北京希望电脑公司,19986 美Jon Bates, Tim Tonpkins著,何健辉等译,实用Visual C+6.0教程,清华大学出版社,20007 美Robert L.Krusw,Alexander J.Ryba著,钱丽萍译,C+数据结构与程序设计,清华大学出版社,2004
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1