冒泡排序和二分查找实验报告.docx
- 文档编号:3487125
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:8
- 大小:73.35KB
冒泡排序和二分查找实验报告.docx
《冒泡排序和二分查找实验报告.docx》由会员分享,可在线阅读,更多相关《冒泡排序和二分查找实验报告.docx(8页珍藏版)》请在冰豆网上搜索。
冒泡排序和二分查找实验报告
(此文档为word格式,下载后您可任意编辑修改!
)
冒泡排序和二分查找实验报告
一实验题目:
基于冒泡排序的二分查找
二实验要求:
2.1:
输出在顺序表中利用二分的方法查找关键字9的过程。
2.2:
实现冒泡排序的过程,并输出{9,8,7,6,5,4,3,2,1,0}的过程
三实验内容:
3.1动态查找表的抽象数据类型:
ADT DynamicSearchTable {
数据对象 D:
D是具有相同特性的数据元素的集合。
各个数据元素均含有类型相同,可唯一标识数据元素的关键字
数据关系R:
数据元素同属一个集合。
基本操作P:
InitDSTable(&DT);
操作结果:
构造一个空的动态查找表DT。
DestroyDSTable(&DT)
初始条件:
动态查找表DT存在。
操作结果:
销毁动态查找表DT。
SearchDSTable(DT,key);
初始条件:
动态查找表DT存在,key为和关键字类型相同的给定值。
操作结果:
若DT中存在其关键字等于key的数据元素,则函数值为该元素的值或在表中的位置,否则为“空”。
InsertDSTable(&DT,e);
初始条件:
动态查找表DT存在,e为待插入的数据元素。
操作结果:
若DT中不存在其关键字等于e.key的数据元素,则插入e到DT。
DeleteDSTable(&DT,key);
初始条件:
动态查找表DT存在,key为和关键字类型相同的给定值。
操作结果:
若DT中存在其关键字等于key的数据元素,则删除之。
TraverseDSTable(DT,visit());
初始条件:
动态查找表DT存在,visit是对结点操作的应用函数。
操作结果:
按某种次序对DT的每个结点调用函数visit()一次且至多一次,一旦visit()失败,则操作失败。
}ADT DynamicSearchTable
3.2存储结构的定义;
二分查找
#definemaxn100
typedefstruct
{
intkey;
chardata[10];
}NodeType;
typedefNodeTypeSeqList[maxn];
冒泡排序
#definemaxn20
typedefstruct
{
intkey;
chardata[10];
}RecType;
3.3基本操作实现:
intBinSearch(SeqListR,intn,intk)
{
intl=0,r=n-1,mid,count=0;
while(l<=r)
{
mid=(l+r)2;
printf("第%d次比较:
在[%d,%d]中比较元素R[%d]:
%d\n",++count,l,r,mid,R[mid].key);
if(R[mid].key==k)
{
returnmid;
}
elseif(R[mid].key>k)
{
r=mid-1;
}
else
{
l=mid+1;
}
}
return-1;
}
voidBubbleSort(RecTypeR[],intn)
{
inti,j,k;
RecTypetemp;
for(i=0;i { for(j=n-1;j>i;--j) { if(R[j].key { temp=R[j]; R[j]=R[j-1]; R[j-1]=temp; } } printf("i=%d,冒出的最小关键字: %d,结果为: ",i,R[i].key); for(k=0;k printf("%2d",R[k].key); printf("\n"); } } 3.4解题思路: 二分查找: 因为原本便是顺序表,是递增序列,所以在一个区间中,我们只要每次判断中间节点和被查找的关键字的大小关系,就可以判断被查找的节点在那一段区间了,然后再进行二分即可。 冒泡排序: 通过一次一次的交换,把无序序列中关键字最小的节点的值交换到前面即可。 3.5解题过程: 实验源代码如下: 3.5.1二分查找 #include typedefstruct { intkey; chardata[10]; }NodeType; typedefNodeTypeSeqList[maxn]; intBinSearch(SeqListR,intn,intk) { intl=0,r=n-1,mid,count=0; while(l<=r) { mid=(l+r)2; printf("第%d次比较: 在[%d,%d]中比较元素R[%d]: %d\n",++count,l,r,mid,R[mid].key); if(R[mid].key==k) { returnmid; } elseif(R[mid].key>k) { r=mid-1; } else { l=mid+1; } } return-1; } intmain() { SeqListR; intk=9; inta[]={},i,n=10; for(i=0;i { R[i].key=a[i]; } printf("关键字序列: "); for(i=0;i printf("%d",R[i].key); printf("\n"); printf("查找%d的比较过程如下: \n",k); if((i=BinSearch(R,n,k))! =-1) printf("元素%d的位置是: %d\n",k,i); else printf("元素%d不在表中\n",k); return0; } 3.5.2冒泡排序 #include typedefstruct { intkey; chardata[10]; }RecType; voidBubbleSort(RecTypeR[],intn) { inti,j,k; RecTypetemp; for(i=0;i { for(j=n-1;j>i;--j) { if(R[j].key { temp=R[j]; R[j]=R[j-1]; R[j-1]=temp; } } printf("i=%d,冒出的最小关键字: %d,结果为: ",i,R[i].key); for(k=0;k printf("%2d",R[k].key); printf("\n"); } } intmain() { inti,k,n=10; inta[]={}; RecTypeR[maxn]; for(i=0;i R[i].key=a[i]; printf("初始关键字: "); for(i=0;i printf("%2d",R[i].key); printf("\n"); BubbleSort(R,n); printf("最后结果: "); for(i=0;i printf("%2d",R[i].key); printf("\n"); return0; } 四实验结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 冒泡 排序 二分 查找 实验 报告