各种排序算法演示--综合排序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计(论文)任务书
学院计算机科学与技术专业2005-1 班
一、课程设计(论文)题目各种排序算法演示
二、课程设计(论文)工作自 2007年 6月 25 日起至 2007年 7月 8日止。
三、课程设计(论文) 地点: 多媒体实验室(5-302,303)
四、课程设计(论文)内容要求:
1.本课程设计的目的
(1)熟练掌握C语言的基本知识和技能;
(2)掌握各种排序(直接插入,希尔,冒泡,快速排序,简单选择,堆排序)方法及适用场合,并能在解决实际问题时灵活应用;
(3)从空间和时间的角度分析各种排序;
(5)培养分析、解决问题的能力;提高学生的科技论文写作能力。
2.课程设计的任务及要求
1)基本要求:
(1)设计一个的菜单将在实现的功能显示出来,并有选择提示;
(2)分别实现直接插入,希尔,冒泡,快速排序,简单选择,堆排序算法;
(3)通过多种测试数据,对各种排序算法的时间复杂度和空间复杂度进行比较并说明在实际场合的运用。
2)创新要求:
提高算法效率,降低时间复杂度和空间复杂度
3)课程设计论文编写要求
(1)要按照课程设计模板的规格书写课程设计论文
(2)论文包括目录、正文、心得体会、参考文献等
(3)课程设计论文用B5纸统一打印,装订按学校的统一要求完成
4)答辩与评分标准:
(1)完成原理分析:20分;
(2)完成设计过程:40分;
(3)完成调试:20分;
(4)回答问题:20分。
5)参考文献:
(1)严蔚敏,吴伟民.数据结构. 北京:清华大学出版社,2006.
(2)严蔚敏、吴伟民、米宁.数据结构题集。北京:清华大学出版社,2006.
(3) 谭浩强. C程序设计(第二版)作者:清华大学出版社,2006.
6)课程设计进度安排
内容天数地点
构思及收集资料2图书馆
编程设计与调试5实验室
撰写论文3图书馆、实验室
学生签名:
年月日
课程设计(论文)评审意见
(1)完成原理分析(20分):优()、良()、中()、一般()、差();(2)设计分析(20分):优()、良()、中()、一般()、差();(3)完成调试(20分):优()、良()、中()、一般()、差();(4)翻译能力(20分):优()、良()、中()、一般()、差();(5)回答问题(20分):优()、良()、中()、一般()、差();(6)格式规范性及考勤是否降等级:是()、否()
评阅人:职称:
年月日
目录
一、问题描述 (4)
二、内容简介 (4)
2.1 基本要求: (4)
2.2. 算法思想: (5)
2.3. 模块划分: (7)
2.4. 数据结构: (7)
2.5. 源程序: (7)
2.6. 测试情况: (20)
三、小结 (24)
四、参考文献 (25)
一、问题描述
分别实现直接插入、希尔、冒泡、快速排序、简单选择、堆排序的算法。分别从空间和时间的角度来分析各种排序的。通过测试多组数据来掌握各种排序的方法及适用场合,并能在解决实际问题灵活运用。在编写代码的时候,有以下几个问题:(1)建立一个主函数,在主函数中要有菜单界面,和输入功能键相应执行的功能。并且要求能循环使用系统。
(2)分别实现直接插入、希尔、冒泡、快速排序、简单选择、堆排序的算法。
(3)通过输入不同的数据数组,来测试每组数据用那种排序算法最优。
二、内容简介
2.1 基本要求:
分别实现直接插入,希尔,冒泡,快速排序,简单选择,堆排序算法;设计一个菜单将要实现的功能显示出来。通过测试多组数据对各种排序算法的时间复杂度和空间复杂度进行比较并说明在实际场合的运用。在实现这六种排序算法的过程中,首先要建立一个静态的说明页面,把每个功能键对应的操作给一一说明,能让使用者快速的进入用户的角色。进入系统时,需要提示用户下一步应该输入什么功能键,并且要让用户清楚的知道输入了此功能键以后将进入什么排序系统中。进入相应的排序系统后,要提示用户输入一组需要排序的数据,输入数据组后,系统要依次显示出未排序前数据的位置,排序后数据的位置,在排序过程中交换或比较的次数,排序的趟树,还有此种排序时间的消耗,并提示按任意键继续系统。并且要构建一个对于同一个数据数组,依次用所有的排序算法给其排序后,输出对应排序算法的时间效率,再经过系统比较后,输出在所有排序方法中时间效率最优的排序算法,如果时间相等,则都输出。系统要可以循环使用,若要退出系统,则只需输入e功能键即可!
2.2. 算法思想:
1.直接插入排序的基本思想是基于插入,开始假定第一个记录有序,然后从第二个记录开始,依次插入到前面有序的子文件中。即将记录R[i](2<=i<=n)插入到有序子序列R[1..i-1]中,使记录的有序序列从R[1..i-1]变为R[1..i] ,最终使整个文件有序。共进行n-1趟插入。最坏时间复杂度是0(n2),平均时间复杂度是0(n2),空间复杂度是O(1),是稳定排序。
2.简单选择排序的基本思想是基于选择,开始有序序列长度为零,第i(1<=i 最坏时间复杂度是0(n2),平均时间复杂度是0(n2),空间复杂度是O(1),是不稳定排序。 3.希尔排序:先将整个待排记录分割成若干子序列分别进行直接插入排序,待整个序列中的记录基本有序时,再对全体记录进行一次直接插入排序 4.冒泡排序:首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换,然后比较第二个记录和第三个记录的关键字。依此类推,直到第N-1和第N个记录的关键字进行过比较为止。上述为第一趟排序,其结果使得关键字的最大纪录被安排到最后一个记录的位置上。然后进行第二趟起泡排序,对前N-1个记录进行同样操作。一共要进行N-1趟起泡排序 5.快速排序思想:首先将待排序记录序列中的所有记录作为当前待排序区域,以第一个记录的关键字作为枢轴(或支点)(pivot),凡其关键字不大于枢轴的记录均移动至该记录之前,凡关键字不小于枢轴的记录均移动至该记录之后。致使一趟排序之后,记录的无序序列R[s..t]将分割成两部分:R[s..i-1]和R[i+1..t],且R[j].key≤R[i].key≤R[k].key(s≤j 6.堆排序基本思想是:堆是n个元素的序列,先建堆,即先选得一个关键字最大或最小的记录,然后与序列中最后一个记录交换,之后将序列中前n-1记录重新调整为堆(调堆的过程称为“筛选”),再将堆顶记录和当前堆序列的最后一个记录交换,如此反复直至排序结束。优点是在时间性能与树形选择排序属同一量级的同时,堆排序只需要一个记录大小供交换用的辅助空间,调堆时子女只和双亲比较。 避免了过多的辅助存储空间及和最大值的比较,