c语言设计大作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学院航空学院
目录
1 摘要 (3)
1.1设计题目 (3)
1.2设计内容 (3)
1.3开发工具 (3)
1.4应用平台 (3)
2 详细设计 (3)
2.1程序结构 (3)
2.2主要功能 (4)
2.3函数实现 (4)
2.4开发日志 (5)
3 程序调试及运行 (6)
3.1程序运行结果 (6)
3.2程序使用说明 (10)
3.3程序开发总结 (10)
4 附件(源程序) (11)
1 摘要
1.1 设计题目
编写七种排序算法的演示程序/
快速排序;
插入排序;
选择排序;
冒泡排序;
堆排序;
归并排序;
基数排序。
1.2 设计内容
先建立具有输入、输出和循环选择子程序功能的主函数,并在主函数中声明每个子函数,再为每一种排序算法建立一个或几个子函数。这个程序就基本完成了。
子函数中直接定义了数组原型,通过七种算法,利用循环语句和自定义函数调用把数组a[10]按升序重新排列。
1.3 开发工具
/*Visual C++ 6.0和Win32。*/
1.4 应用平台
Windows XP/7 32位
2 详细设计
2.1 程序结构
先建立具有输入、输出和循环选择子程序功能的主函数,并在主函数中声明每个子函数,接着再用一个switch分支选择对各个子函数进行引用。再为每一种排序算法建立一个或几个子函数。
参数基本都是传递排序数组的个数和数组的头指针,没有返回值。
2.2 主要功能
/*这七道程序的作用是把数组中的数从小到大排序。他们分别使用了不同的算法,对数组a进行排列。这七个程序能实现对一些常见的排序算法的演示,使我们对这些排序算法的原理和算法的实现过程更加熟悉,对C语言的语法结构和数据结构更加清晰。*/
2.3 函数实现
1. 快速排序:就是你从数组中任取一个元素p (可随机取,现在以取第一个为例),以P作为主元,对数组进行划分,前一部分小于P,后一部分大于p,划分处理存储p ,然后分别对划分后的前一部分和后一部分使用递归调用。最后将数组划分为小数组,通过局部的有序合并,解决问题。
2.选择法:这种方法提高了一点性能(某些情况下)这种方法类似我们人为的排序习惯:从数据中选择最小的同第一个值交换,在从省下的部分中选择最小的与第二个交换,这样往复下去。
3.插入法:插入法较为复杂,它的基本工作原理是抽出牌,在前面的牌中寻找相应的位置插入,然后继续下一张。这种算法其实不是简单算法中最好的,因为其循环次数虽然并不固定,我们仍可以使用O方法。从上面的结果可以看出,循环的次数f(n)<= 1/2*n*(n-1)<=1/2*n*n。所以其复杂度仍为O(n*n)(这里说明一下,其实如果不是为了展示这些简单排序的不同,交换次数仍然可以这样推导)。现在看交换,从外观上看,交换次数是O(n)(推导类似选择法),但我们每次要进行与内层循环相同次数的‘=’操作。正常的一次交换我们需要三次‘=’而这里显然多了一些,所以我们浪费了时间。
4.冒泡排序:书上有。
5.堆排序:用二叉树的结构来表示数组,及用数组来表示二叉树的结构,比如i为父节点其子节点为2i和2i+1。其中,大顶堆中父节点大于其两个子节点。
6.归并排序:归并排序是多次将两个或两个以上的有序表合并成一个新的有序表。最简单的归并是直接将两个有序的子表合并成一个有序的表。
7.基数排序:先从数据的低位开始,进行分配,分成10个空间,分别存储位为0,1,2,3…9,重复的对次地位操作,知道预定的高位,排序完成。
2.4 开发日志
/*请在详细描述你设计、调试程序的过程,这里的描述类似日记*/
这七个算法在我们C语言课堂上只学过两种即冒泡法和选择法。于是我先把这两种算法编辑出来了。然后其他五种算法我只有通过查阅其它C语言的教材和上网学习来弄懂。最后又和其他同学讨论终于把七个零散的程序编写出来了。本以为这样就万事大吉了,不过看到其它同学都是用了switch语句进行选择,我才知道最难的还没到,我只有一边看书并请教老师用switch语句,把七道程序组合到一个程序里,这样就完成了编程。接着是报告这个也挺难弄的。主要是有些项目不知道写啥东西,通过与同学讨论和自己琢磨,终于完成了报告,也不知道对不对。总之,这个大作业的确是消耗了很多时间和脑力,不过感觉收获挺大的。
3 程序调试及运行3.1 程序运行结果
3.2 程序使用说明
/*请在这里详细描述如何使用你的程序,就好比是一个小型说明书*/
。打开程序后,运行程序,先进行switch选择,可以选择七种不同算法即快速排序;
插入排序;选择排序;冒泡排序;堆排序;归并排序;基数排序.程序会自动演示排序结果。
3.3 程序开发总结
/*请在这里简要描述你对编写大作业的收获与思考*/
搞了一个星期总算完成了这个大作业,尽管可能编的并不是很好,程序显得有些乱,但毕竟是大功告成。这次大作业有几个类型,其中算法型最难,当然分值也最高,因此我果断选了这个。刚拿到题目,顿时傻了眼。前面几个题闻所未闻完全不知如何下手,总算找到一个见到过的题目,可是这七种算法我才会两种即冒泡法和选择法。其他的也是闻所未闻。于是只有找C语言的其他教材,上网搜才搞清楚其他的五算法是啥意思。终于把七道程序弄出来了,然而这项工作还只是冰山一角,这个报告才是最难搞的。因为不知道应该写啥,没有模板可以借鉴,最后只有与同学探讨,试探这弄出来了买也不知道和不合格。不过在这复习备考的黄金时刻,拿大把时间做这个大作业确实太过奢侈,不免与同学有些相互借鉴。不管怎样大作业是写了,本学期的C语言上机也就结束了,不过说实话我们的C语言技术还差得很,很多问题没有搞懂,还有许多知识点没有涉及。不过通过的大作业我对排序法应该是有了不小突破七把利剑在手还怕不会排序