西华大学理学院课程设计说明书
图 9.2
9.输入了“7”服务时,如图10所示:
图 10
整个对随机数的产生,快速排序、冒泡排序、直接插入排序、归并排序、简单选择排序、堆排序的操作过程就是这样,很简单。
5、算法效率的分析 5.1 耗费时间
对20000个随机数各种排序平均运行时间统计如下表:
快速排序 冒泡排序 0.001s
0.009s 直接插入排序 0s 归并排序 0.059s 简单选择 0.021s 堆排序 0.001s 5.2性能分析
(1)若n较小(如n≤50),可采用直接插入或直接选择排序。
当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。
(2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜;
(3)若n较大,则应采用时间复杂度为的排序方法:快速排序、堆排序或归并排序。
22
排序综合
(4)堆排序适合于数据量非常大的场合(百万数据)。堆排序不需要大量的递归或者多维的暂存数组。这对于数据量非常巨大的序列是合适的。比如超过数百万条记录,因为快速排序,归并排序都使用递归来设计算法,在数据量非常大的时候,可能会发生堆栈溢出错误。堆排序会将所有的数据建成一个堆,最大的数据在堆顶,然后将堆顶数据和序列的最后一个数据交换。接下来再次重建堆,交换数据,依次下去,就可以排序所有的数据。
5.3时间效率
1. 插入排序的算法的时间复杂度为:
2. 希尔排序的算法的时间复杂度为n的1.2次幂
3. 冒泡排序的算法的时间复杂度为:O(n^2)。当数据为正序,将不会有交换,复杂度为O(n)。
4. 快速排序的算法时间复杂度为:O(nlogn),是所有内部排序方法中最好的,大多数情况下总是最好的。
5. 简单排序的算法的时间复杂度为O(n^2): 6. 堆排序的算法的时间复杂度为:O(nlogn)
23
西华大学理学院课程设计说明书
总 结
在一个学期后的基础理论知识的学习后进入实践的操作虽然仍就有些困难但也是另一种进步的好途径。这次的课程设计主要是对基础知识的灵活使用,这就让我进一步提高了对数据结构知识的巩固。这次设计的完成,困难是少不了的,还有许多其他的难题让我都曾不知所措,但通过努力最终解决它们让我体会到成就感,更重要的是我的能力在无形中得到了提升和优化。
这次课程设计的心得体会通过实习我的收获如下:1、巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力。2、培养了我选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。3、通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。4、通过课程设计,培养了我严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。
我通过课程设计建立系统设计的整体思想,锻炼编写程序、调试程序的能力,学习文档编写规范,培养独立学习、吸取他人经验。同时,充分弥补了课堂教学及普通实验中知识深度与广度有限的缺陷,更好地帮助从全局角度把握课程体系,并且可以将理论与实际联系。在课程设计的过程中不仅仅是书本上的知识,这便促使我去查阅更多的课外资料来充实自己的内容,同时学会在面对困难时要耐心得分析它细心得解决它以及通过合作更完美得深入了解剖析它以便得到提高。细心、耐心、团结、求知,是我这次课程设计最大的收获。
24
排序综合
致 谢
本次设计是在陈晓亮老师的悉心指导和热心帮助下完成的。他给我的程序设计和论文提出了很多宝贵的意见,并给我作了仔细的修改。在他的鼓励与耐心的指导下,我的设计和论文才能快速、保质量完成。在和陈老师的接触中,他给我以毫不保留的指导,促进了我对专业知识的巩固和提高,让我受益匪浅。然后还要感谢大学的所有的老师,为我打下博大精深的专业知识的基础,同时还要感谢所有的同学们,正是因为有了大家的相互学习相互交流,才让我有了做题灵感,正是因为有了你们的支持和鼓励,此次设计才会顺利完成。在此,衷心的谢谢您们
总之,数据结构课程设计让我受益良多,我会好好珍惜像这种难得的机会,努力学习知识。也感谢帮助了我的老师、同学。
25
西华大学理学院课程设计说明书
参考文献
[1] 严蔚敏,吴伟民,数据结构(C语言版).北京:清华大学出版社,1997 [2] 谭浩强,C程序设计(第三版).北京:清华大学出版社,2005
[3] Jeri R.Hanly,Elliot B. Koffman,问题求解与程序设计C语言版(第四版).北京:清华大学出版社,2007-1
[4] 何钦铭,颜晖,C语言设计教程.北京:高等教育出版社,2008年 [5] 吴文虎,程序设计基础.北京:清华大学出版社,2003
26