排序算法设计技能训练报告.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
排序算法设计技能训练报告

淮阴工学院算法设计技能训练报告姓名:学号:班级:学院:计算机与软件工程学院专业:计算机科学与技术题目:排序算法的比较指导教师:李笑平目录课题任务描述3系统设计32.1功能模块设计32.2数据结构设计32.3算法设计3详细设计3测试3结论3致谢3参考文献3课题任务描述利用随机函数产生N个随机整数(20000以上),对这些数进行多种方法进行排序。1.1 要求:1.1.1 ?至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序)。并把排序后的结果保存在不同的文件中。1.1.2 统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。1.1.3 ?如果采用4种或4种以上的方法者,可适当加分。系统设计2.1功能模块设计2.1图数据模块进入选择结束2.2数据结构设计int A[n]; srand(time(0));for(int i=0;in;i++) A[i]=rand()%n;利用数组A进行生成随机数组然后进行排序struct node{int index; node* next;};class MyLisprivate:node* head; int length;利用链表进行排序2.3算法设计1.直接插入排序原理:将数组分为无序区和有序区两个区,然后不断将无序区的第一个元素按大小顺序插入到有序区中去,最终将所有无序区元素都移动到有序区完成排序。2.希尔排序原理:又称增量缩小排序。先将序列按增量划分为元素个数相同的若干组,使用直接插入排序法进行排序,然后不断缩小增量直至为1,最后使用直接插入排序完成排序。要点:增量的选择以及排序最终以1为增量进行排序结束。1.冒泡排序原理:将序列划分为无序和有序区,不断通过交换较大元素至无序区尾完成排序。要点:设计交换判断条件,提前结束以排好序的序列循环2.快速排序原理:不断寻找一个序列的中点,然后对中点左右的序列递归的进行排序,直至全部序列排序完成,使用了分治的思想。1.直接选择排序原理:将序列划分为无序和有序区,寻找无序区中的最小值和无序区的首元素交换,有序区扩大一个,循环最终完成全部排序。.堆排序原理:利用大根堆或小根堆思想,首先建立堆,然后将堆首与堆尾交换,堆尾之后为有序区。归并排序原理:将原序列划分为有序的两个序列,然后利用归并算法进行合并,合并之后即为有序序列。详细设计测试图 4.1图 4.2图4.3结论(1)平方阶(O(n2))排序??? 一般称为简单排序,例如直接插入、直接选择和冒泡排序;(2)线性对数阶(O(nlgn))排序??? 如快速、堆和归并排序;(3)O(n1+£)阶排序??? £是介于0和1之间的常数,即0£1,如希尔排序;(4)线性阶(O(n))排序??? 如桶、箱和基数排序。各种排序方法比较??? ?简单排序中直接插入最好,快速排序最快,当文件为正序时,直接插入和冒泡均最佳。影响排序效果的因素??? 因为不同的排序方法适应不同的应用环境和要求,所以选择合适的排序方法应综合考虑下列因素:  ①待排序的记录数目n;  ②记录的大小(规模);  ③关键字的结构及其初始状态;  ④对稳定性的要求;  ⑤语言工具的条件;  ⑥存储结构;  ⑦时间和辅助空间复杂度等。不同条件下,排序方法的选择(1)若n较小(如n≤50),可采用直接插入或直接选择排序。??? 当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。(2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜;(3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。??? 快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;??? 堆排序所需的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。这两种排序都是不稳定的。??? 若要求排序稳定,则可选用归并排序。但本章介绍的从单个记录起进行两两归并的?排序算法并不值得提倡,通常可以将它和直接插入排序结合在一起使用。先利用直接插入排序求得较长的有序子文件,然后再两两归并之。因为直接插入排序是稳定的,所以改进后的归并排序仍是稳定的。?排序算法的稳定性?1)稳定的:如果存在多个具有相同排序码的记录,经过排序后,这些记录的相对次序仍然保持不变,则这种排序算法称为稳定的。???插入排序、冒泡排序、归并排序、分配排序(桶式、基数)都是稳定的排序算法。??? 2)不稳定的:否则称为不稳定的。???直接选择排序、堆排序、shell排序、快速排序都是不稳定的排序算法致谢谢我的老师,他们严谨细致、一丝不

文档评论(0)

hhuiws1482 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档