数据结构中查找和排序算法实验报告.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文档。上传文档
查看更多
第 页,共 页 郑州轻工业软件学院试验报告 姓名 张文豪 班级 测试技术15-01 试验名称 数据结构中查找和排序算法 三.实验分析与步骤: 1. 折半查找分析: 有序表表示静态查找表时,Search函数可用折半查找来实现。先确定待查记录所在的范围(区间),然后逐步缩小范围直到找到或找不到该记录为止。 2.顺序查找分析: 查找操作的性能分析:查找算法中的基本操作是将记录的关键字和给定值进行比较,,通常以“其关键字和给定值进行过比较的记录个数的平均值”作为衡量依据。 平均查找长度:为确定记录在查找表中的位置,需用和给定值进行比较的关键字个数的期望值称为查找算法在查找成功时的平均查找长度。 其中:Pi为查找表中第i个记录的概率,且; Ci为找到表中其关键字与给定值相等的第i个记录时,和给定值已进行过比较的关键字个数。 等概率条件下有: 假设查找成功与不成功的概率相同: 3.归并排序分析: 将两个或两个以上的有序表组合成一个新的有序表的方法叫归并。 假设初始序列含有n个记录,则可看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到n/2个长度为2或1的有序子序列;再两两归并,如此重复。 4.堆排序分析: 只需要一个记录大小的辅助空间,每个待排序的记录仅占有一个存储空间。 什么是堆?n个元素的序列{k1,k2,...,kn}当且仅当满足下列关系时,称之为堆。关系一:ki=k2i 关系二:ki=k2i+1(i=1,2,...,n/2) 堆排序要解决两个问题:1、如何由一个无序序列建成一个堆?2、如何在输出堆顶元素之后,调整剩余元素成为一个新的堆? 问题2的解决方法: 四.实验数据与清单: 1. 折半查找算法描述如下: int Search_Bin(SSTable ST,KeyType key) low=1;high=ST.length; while(low=high){ mid=(low+high)/2; if EQ(key,ST.elem[mid].key) return mid; else if LT(key,ST.elem[mid].key) high=mid -1; else low=mid +1 ; } return 0; }//Search_Bin; 2.顺序查找算法描述如下: 静态查找表的顺序存储结构: typedef struct { ElemType *elem; int length; }SSTable; 顺序查找:从表中最后一个记录开始,逐个进行记录的关键字和给定值的比较,若某个记录的关键字和给定值比较相等,则查找成功,找到所查记录;反之,查找不成功。 int Search_Seq(SSTable ST,KeyType key){ ST.elme[0].key=key; for(i=ST.length; !EQ(ST.elem[i].key,key); --i); return i; } 3.归并排序算法描述如下: merge(ListType r,int l,int m,int n,ListType r2) { i=l;j=m+1;k=l-1; while(i=m) and(jn) do { k=k+1; if (r[i].key=r[j].key) {r2[k]=r[i];i++;} else {r2[i]=r[j];j++} } if (i=m) r2[k+1..n]=r[i..m]; if (j=n) r2[k+1..n]=r[j..n]; } mergesort(ListType r,ListType r1,int s,int t) { if (s==t) r1[s]=r[s]; else { mergesort(r,r2,s,s+t/2); mergesort(r,r2,s+t/2+1,t); merge(r2,s,s+t/2,t,r1); } } 4.堆排序算法描述如下: sift(ListType r,int k,int m) { i=k;j=2*i;x=r[k].key;finished=FALSE; t=r[k]; while((j=m)(!finished)) { if ((jm)(r[j].keyr[j+1].key)) j++; if (x=r[j].key) finished:=TRUE; else {r[i]=r[j];i=j;j=2*i;} } r[i]=t; } HeapSort(ListType r) { for(i=n/2;i0;i--) sift(r,i,n); for(i=n;i1;i--){ r[1]-r[i]; sift(r,i,i-1) } } 五.实验体会: 通过本次实验,我了发现书本上的知识和老师的讲解都能慢慢理解。但是做实验的时候,需要

文档评论(0)

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

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

1亿VIP精品文档

相关文档