1、冒泡排序选择排序等长 春 理 工 大 学学 生 实 习 报 告 2010 2011 学年 第 一 学期实习类别: 软件算法设计 学 院: 软件学院 专 业: 网络工程 班 级: 0913211 姓 名: 李皓楠 2011年12月 30日起 止 周1718周 数2实习地点软件学院专业实验室实习目的: 对起泡排序、直接排序、简单选择排序、快速排序、希尔排序、堆排序算法进行比较,用数据和图形表示结果。实习要求: (1) 对起泡排序、直接排序、简单选择排序、快速排序、希尔排序、堆排序算法进行比较;(2) 待排序的元素的关键字为整数。其中的数据要用伪随机产生程序产生(如10000个),至少用5组不同的输
2、入数据做比较,再使用各种算法对其进行排序,记录其排序时间,再汇总比较。(3) 演示程序以人机对话的形式进行。每次测试完毕显示各种比较指标值的列表,用饼图或条形图进行表示,以便比较各种排序的优劣。(4) 界面友好,易与操作。采用菜单方式进行选择。实习进度安排及主要内容: 第一周: 熟悉程序要求,设计程序,画流程图,设计模块实现,查找资料,对困难部分求解。第二周: 写代码,调试程序,写实验报告。成绩:指导教师/带队教师(签字)年 月 日一、 需求分析在主程序中用无现循环实现一个菜单输入,不同选择,对各种排序测试排序时间,移动次数和比较次数,用表格和条形图的形式进行直观呈现。二、 算法的基本思想 1
3、 模块调用关系画表模块程序流程图:算法的主要思路是:在主程序中实现一个菜单,用户可以输入选项,选择不同的操作,实现不同的操作:1 基本思路:(1) 程序开始时生成10000个随机数(2) 显示菜单并等待输入选项(3) 若输入非菜单选项,则提示出错并重新输入(4) 若输入菜单选项,则执行相应的模块并显示结果(5)提示用户是否继续,是,则循环,否,则结束2函数dodraw(int a)用来显示条形图,基本思路:(1) a用来表示画的是时间图,移动次数图还是比较次数图有0,1,2三种选择(2) dodraw调用draw()函数画出条状void dodraw(int a)void drawl(doub
4、le pt,int a) 3 函数void domany(SqList *s)用来实现对各种排序的五次测试,并对数据进行汇总处理基本思路如下:.(1) 对各种排序进行5次循环调用,累加其排序时间,移动次数,比较次数。(2) 对排序时间,移动次数,比较次数进行处理,得出平均一次排序的数据(3) 调用画图,画表函数三、测试数据程序运行实例如下:程序开始时的画面:选择菜单1:如果按y键则继续循环按n键则退成,其他提示错误:菜单7为使用一组数据测试,8为使用5组数据进行测试使用表格表示的结果各种排序时间占用比例图:比较次数比例图:移动次数比例图:三、 系统文件使用说明 打开程序,根据提示输入菜单选项,没有的提示出错,重新输入,查看结果,然后按y键继续测试,按n键退出,其他键提示出错。四、 心得体会 通过这次课程设计,我感觉自己的编程水平还有待提高,以前学的知识有的已经遗忘,新学的又不是很熟,用起来很费力气,以后经常编程时必须的,同时我感觉程序设计语言都是相通的,最重要的还是思想,当然只有基础打好了,思想才有发挥的余地。六、参考文献 1数据结构(C语言版) 严蔚敏,吴伟民 清华大学出版社 第十章