内容发布更新时间 : 2024/11/15 3:05:05星期一 下面是文章的全部内容请认真阅读。
及时间,如图5.3:
图5.3 输入2后的运行结果
3)输入3回车,即得快速排序的排序结果及其关键字比较次数和移动次数及时间,如图5.4:
图5.4 输入3后的运行结果
4)输入4回车,即得堆排序的排序结果及其关键字比较次数和移动次数及时间,如图5.5:
- 20 - 20
图5.5 输入4后的运行结果
5)输入5回车,即得冒泡排序的排序结果及其关键字比较次数和移动次数及时间,如图5.6:
图5.6 输入5后的运行结果
6)输入6回车,即得选择排序的排序结果及其关键字比较次数和移动次数及时间,如图5.7:
- 21 - 21
图5.7 输入6后的运行结果
7)输入7回车,即得以上所有排序的排序结果及其关键字比较次数和移动次数及时间,如图5.8:
图5.8 输入7后的运行结果
8)输入8回车,即退出该程序。
- 22 -
22
4.3排序算法的评价
对各种表长和测试组数进行了测试,程序运行正常。分析实测得到的数值,6种排序算法(快速排序采用“比中法”)的特点小结如下: 测试 比较次数 插入排序 希尔排序 快速排序 堆排序 冒泡排序 选择排序 第三多 少 少 稍多 最多 第二多 越乱(逆)乱否差异乱否差异乱否差异越乱(逆)与乱否无越多 小 小 很小 越多 关 第二多 约为快速第二少 稍多 最多 最少 移动次越乱(逆)排序的两乱否差异乱否差异越乱(逆)正和逆序数 越多 倍 较小 很小 越多 少 (1)若n较小(如n≤50),可采用直接插入或直接选择排序。
当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。
(2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜;
(3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。
结束语
在一个学期后的基础理论知识的学习后进入实践的操作虽然仍就有些困难但也是另一种进步的好途径。这次的课程设计主要是对基础知识的灵活使用,这就让我进一步提高了对数据结构知识的巩固。这次设计的完成,困难是少不了的,还有许多其他的难题让我都曾不知所措,但通过努力最终解决它们让我体会到成就感,更重要的是我的能力在无形中得到了提升和优化。这次课程设计的心得体会通过实习我的收获如下1、巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力。2、培养了我选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。3、通过实际编译系统
- 23 - 23
的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。4、通过课程设计,培养了我严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。根据我在实习中遇到得问题,我将在以后的学习过程中注意以下几点: 1、认真上好专业实验课,多在实践中锻炼自己。2、写程序的过程中要考虑周到,严密。3、在做设计的时候要有信心,有耐心,切勿浮躁。4、认真的学习课本知识,掌握课本中的知识点,并在此基础上学会灵活运用。5、在课余时间里多写程序,熟练掌握在调试程序的过程中所遇到的常见错误,以便能节省调试程序的时间。我通过课程设计建立系统设计的整体思想,锻炼编写程序、调试程序的能力,学习文档编写规范,培养独立学习、吸取他人经验,树立团队协作精神。同时,充分弥补了课堂教学及普通实验中知识深度与广度有限的缺陷,更好地帮助从全局角度把握课程体系,并且可以将理论与实际联系。在课程设计的过程中不仅仅是书本上的知识,这便促使我去查阅更多的课外资料来充实自己的内容,同时学会在面对困难时要耐心得分析它细心得解决它以及通过合作更完美得深入了解剖析它以便得到提高。细心、耐心、团结、求知,是我这次课程设计最大的收获。同时要感谢老师这几天的悉心教导。
参考文献
[1] 宁正元,王秀丽.算法与数据的结构,2006:29~32 [2] 杨辉.杨辉的纵横图论,2003:12~14 [3] 唐王希.太乙金镜式经,2000:35~37
[4] 王力柱。c/c++与数据结构。栈,2003(8):142~152 [5] 徐孝凯,贺桂英。数据结构。栈和队列,2004(10):76~92 [6] 吴乃陵,李海文。c++程序设计。栈,2003(8):80~87 ,263~270 [7] 陈媛,何波,涂晓江,涂飞。算法与数据结构。栈,2005(4) [8] 张勇,刘君仪。数据结构。栈,2006(8):96~107
[9] 王挺,周会平。c++程序设计。2005(1):30~38
- 24 -
24
[10]严蔚敏,吴伟民。数据结构。北京:清华大学出版社,2001
- 25 - 25