- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
排序算法的实现数据结构报告
合肥学院 计算机科学与技术系 课程设计报告 XX~XX学年第学期 课 学 学 专 指业导班教生姓程数据结构与算法内部排序算法比较名号级师课程设计名称 XX年1月 【课题22、】内部排序算法比较 一、问题分析和任务定义 各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。试通过随机的数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。根据对本设计任务要求的理解和分析,按以下两点问题进行分析: 题目要求对十种排序算法进行比较,比较的主要内容是关键字的比较次数和移动次数,其中待排序数用。 二、数据结构的选择和概要设计 为了实现十种排序算法,产生的随机数用顺序表存储比较方便。顺序表数据类型描述如下: typedefintKeyType; structrec { KeyTypekey; }; typedefrecsqlist[N]; 2.主程序与各模块之间的关系是: (1)voidgensort(intb[],intn)起泡排序 (2)voidinsertsort(sqlistb,intn)插入排序 (3)voidso(sqlistnum,intn)折半插入排序 (4)voidshellsort(sqlistb,intn)希尔排序 (5)voidgentsort(intb[],intn)选择排序 (6)voidoutput(sqlistb,intn)快速排序 (7)voidsort3(sqlistnu,intn)//2-路插入排序 (8)voidMerge(sqlista,sqlistb,intlow,intmid,inthigh)二路归并排序 (9)voidMergePass(sqlista,sqlistb,intn,intlenth)一趟归并排序 (10)voidMergeSort(sqlista,intn)//进行二路归并 (11)voidsift(sqlistr,ints,intm)堆(转载于:写论文网:排序算法的实现数据结构报告)排序 (12)voidinit(inta[])//随机生成N个整数 三、详细设计和编码 在整个课程设计中,要求实现要求的功能,必须要有主函数,并通过主函数调用各功能子模块,以上展示各个模块的功能,以下将分析主函数和各个模块中的具体算法和实现。 1.起泡排序函数的实现 函数声明:voidgensort(intb[],intn) 起泡排序的基本思想是将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换,然后比较第二个记录和第三个记录的关键字。依次类推,直至第n-1个记录和第n个记录的关键字进行比较为止。起泡排序是一种稳定的排序方法,在随机产生数的情况下,总的时间复杂度为O(n2)。 2.选择排序函数的实现 函数声明:voidgentsort(intb[],intn) 选择排序法的基本思想是:第i趟排序通过n-i次关键码的比较,在n-1+i(1right,然后再把第i个元素前1位与目标位置之间的所有元素后移,再把第i个元素放在目标位置上。 6.快速排序函数的实现 函数声明:voidoutput(sqlistb,intn)//输出元素值 首先选一个轴值,将待排序记录分割成独立的两部分,左侧记录的关键码均小于或等于轴值,右侧记录的关键码均大于或等于轴值,然后分别对这两部分重复上述过程,直到整个序列有序。快速排序是一种不稳定的排序方法,时间复杂度为O 7.堆排序函数的实现 函数声明:voidsift(sqlistr,ints,intm) 首先将待排序的记录序列构造成一个堆,此时,选出了堆中所有记录的最大者即堆顶记录,然后将它们从堆中移走,并将剩余的记录再调整成堆,这样又找出了次大的记录,依此类推,直到堆中只有一个记录为止。堆排序是一种不稳定的排序方法,总的时间复杂度为O(nlog2n)。 8.二路归并排序函数的实现 函数声明:voidMerge(sqlista,sqlistb,intlow,intmid,inthigh) voidMergePass(sqlista,sqlistb,intn,intlenth) voidMergeSort(sqlista,intn) 合并排序:这里的合并排序和下边要描述的快速排序都采用了分而治之的思想,但两者仍然有很大差异。合并排序是将一个无序数组n[1…r]分成两个数组n[1…r/2]与n[r/2+1…r],分别对这两个小数组进行合并排序,然后再将这两个数组合并成一个大数组。
文档评论(0)