实验五(快速、堆、基数)排序算法的设计.docVIP

实验五(快速、堆、基数)排序算法的设计.doc

  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文档。上传文档
查看更多
实验五 (快速、堆、基数)排序算法的设计 实验目的和要求 实验目的: 1.深刻理解排序的定义和各种排序方法的特点,并能灵活运用。 2.掌握常用的排序方法,并掌握用高级语言实现排序算法的方法。 3.了解各种方法的排序过程及其依据的原则,并掌握各种排序方法的性能的分析方法。 实验要求: 要求彻底弄懂排序的物理存储结构,并通过此试验为以后的现实使用打下基础。 实验内容和原理 (1)实验内容: 设计快速排序,堆排序和基数排序的算法。 (2)实验原理: 快速排序:在待排序的n个数据中,任取一个数据为基准,经过一次排序后以基准数据把全部数据分为两部分,所有数值比基准数小的都排在其前面,比它大的都排在其后,然后对这两部分分别重复这样的过程,直到全部到为为止。堆排序:对待排序的n个数据,依它们的值大小按堆的定义排成一个序列,从而输出堆顶的最小值数据(按最小值跟堆排序),然后对剩余的数据再次建堆,便得到次小的,如此反复进行输出和建堆,直到全部排成有序列。基数排序:LSD法:先按最低关键字位k1对待排序数据中的n个值进行排序,按k1值把待排序文件中的n个记录分配到具有不同k1值的若干个堆,然后按k1值从小到大的次序收集在一起,下次再按高一位关键子位k2的值进行分配和收集,如此不断地按更高一位关键字位进行分配和收集,直到用kn分配和收集之后,整个数据按多关键字位有序。堆排序:堆排序分为建堆和堆调整,初始建堆时将与此序列对应的一维数组看成是一棵完全二叉树,从完全二叉树的最后一个结点K(i)(i等于n/2向下取整)开始,通过调整逐步使以K(i)到K(1)为根的子树满足堆的定义,直到以K(1)为根的树满足堆定义时初始堆建成。堆调整在出堆顶记录之后,用堆中的最后一个记录替代原堆顶记录。由于除根节点K(i)之外的所有子树仍具有堆的性质,故只需对根结点自上而下调整即可。 实验环境 硬件:(1)学生用微机(2)多媒体教室或远程教学(3)局域网环境 软件:(1)Windows XP中文操作系统 (2)Turbo C 3.0 算法描述及实验步骤 快速排序 设两个指示器变量i和j,分别指向待排序区间的第一个记录和最后一个记录; 先将第一个记录移到暂存变量temp中,然后j从区间的最后一个记录起向前扫描,直到找到满足R[j]temp的记录时,将R[j]移入R[i]中; 再令i自i+1起向后扫描,直到找到满足R[i].keytemp.key的记录时,将R[j]移入R[i]中; 就这样j自j-1从后向前扫描一次移入一个R[j]于R[i]中,i自i+1从前向后扫描一次移入一个R[i]于R[j]中,反复交替地扫描和移动记录; 直到i=j时把temp移入R[i]中(区间中第一个记录应在位置),它把整个待排序区间分割成为两个区间的一个分割排序算法; 对于待排序文件R[]利用一个分割区间排序算法时,令s=1和t=n即可完成第一趟排序;由此得到的两个更小的区间R[1,···,i-1]和R[i+1,···,n],继续利用算法dividesreasort分割为更小的4个区间;如此一直进行下去,直到都分割为只有一个记录时排序结束。 堆排序 堆调整是从根结点向下的一个筛选过程;而建初始堆是从最后一个分枝结点开始到根结点结束的多次向下的筛选过程; 基数排序 第1趟分配按最低关键字位进行,改变记录结点的指针值将文件中的所有记录分配到10个队列中;第2趟的分配和收集以及第3趟的分配和收集是分别针对关键字中的十数和百位数进行的,其分配和收集过程与个位数时相同。 调试过程 (一)快速排序 堆排序 实验结果 快速排序 堆排序 基数排序 总结 从懵懂到懂得,这是通过调试过程所得到的收获;再次回顾了之前所学的单链表结构的建立,堆的建立。从中体会快速排序、堆排序、基数排序算法的思想,如何优化算法是将来需要进一步改善的地方。 附录: 代码 快速排序 #includestdio.h #define Maxsize 100 #define m 10 void quicksort(int R[],int n) { int i,j,low,high,temp,top=-1; struct node { int low,high; }st[Maxsize]; top++; st[top].low=0;st[top].high=n-1; while(top-1) { low=st[top].low;high=st[top].high; top--; i=low;j=high; if(

文档评论(0)

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

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

1亿VIP精品文档

相关文档