当前位置:
文档之家› 数据结构中查找和排序算法实验报告
数据结构中查找和排序算法实验报告
平均查找长度:为确定记录在查找表中的位置,需用和给定值进行比较的关键字个数的期望值称为查找算法在查找成功时的平均查找长度。
其中:Pi为查找表中第i个记录的概率,且 ;Ci为找到表中其关键字与给定值相等的第i个记录时,和给定值已进行过比较的关键字个数。
等概率条件下有:
假设查找成功与不成功的概率相同:
3.归并排序分析:
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.顺序查找算法描述如下:
while(i<=m) and(j<n) 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.堆排序算法描述如下:
finished:=TRUE;
else {r[i]=r[j];i=j;j=2*i;}
}
r[i]=t;
}
HeapSort(ListType &r)
{
for(i=n/2;i>0;i--) sift(r,i,n);
for(i=n;i>1;i--){
r[1]<->r[i];
sift(r,i,i-1)
}
}
五.实验体会:
静态查找表的顺序存储结构:
typedef struct {
ElemType *elem;
int length;
}SSTable;
顺序查找:从表中最后一个记录开始,逐个进行记录的关键字和给定值的比较,若某个记录的关键字和给定值比较相等,则查找成功,找到所查记录;反之,查找不成功。
int Search_Seq(SSTable ST,KeyType key){
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 ((j<m)&&(r[j].key>r[j+1].key)) j++;
if (x<=r[j].key)
堆排序要解决两个问题:1、如何由一个无序序列建成一个堆?2、如何在输出堆顶元素之后,调整剩余元素成为一个新的堆?
问题2的解决方法:
四.实验数据与清单:
1.折半查找算法描述如下:
int Search_Bin(SSTable ST,KeyType key)
low=1;high=ST.leng Nhomakorabeah;while(low<=high){
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;
通过本次实验,我了发现书本上的知识和老师的讲解都能慢慢理解。但是做实验的时候,需要我把理论变为上机调试,这无疑是最难的部分,有时候我想不到合适的算法去解决问题,就请教同学,上网搜索,逐渐纠正了自己的错误。这次的程序设计对我的编程设计思维有很大的提高,以前我很不懂这门课,觉得它很难,但是现在明白了一些代码的应用,明白了每个程序都有相似的特点,通用的结构,也学会了静下心来写程序。我以后还要把没学好的知识点补齐,克服编程过程中的难关,打实基础,向更深入的层次发展。
将两个或两个以上的有序表组合成一个新的有序表的方法叫归并。
假设初始序列含有n个记录,则可看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到n/2个长度为2或1的有序子序列;再两两归并,如此重复。
4.堆排序分析:
只需要一个记录大小的辅助空间,每个待排序的记录仅占有一个存储空间。
什么是堆?n个元素的序列{k1,k2,...,kn}当且仅当满足下列关系时,称之为堆。关系一:ki<=k2i关系二:ki<=k2i+1(i=1,2,...,n/2)
郑州轻工业软件学院试验报告
姓名
张文豪
班级
测试技术15-01
试验名称
数据结构中查找和排序算法
三.实验分析与步骤:
1.折半查找分析:
有序表表示静态查找表时,Search函数可用折半查找来实现。先确定待查记录所在的范围(区间),然后逐步缩小范围直到找到或找不到该记录为止。
2.顺序查找分析:
查找操作的性能分析:查找算法中的基本操作是将记录的关键字和给定值进行比较,,通常以“其关键字和给定值进行过比较的记录个数的平均值”作为衡量依据。