查找算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四查找算法的设计
一、实验目的
(1)理解静态查找和动态查找;
(2)掌握顺序查找和二分查找的算法;
(3)掌握二叉查找树的基本运算。
二、实验内容
(1)实现顺序查找的算法;
(2)实现二分查找的算法;
(3)实现二叉查找树的基本运算算法。
三、算法思想与算法描述
1、顺序查找,在顺序表R[0..n-1]中查找关键字为k的记录,成功时返回找到的记录位置,失败时返回-1,具体的算法如下所示:
int SeqSearch(SeqList R,int n,KeyType k)
{
int i=0;
while(i { printf("%d",R[i].key); i++; } if(i>=n) return -1; else { printf("%d",R[i].key); return i; } } 2、二分查找,在有序表R[0..n-1]中进行二分查找,成功时返回记录的位置,失败时返回-1,具体的算法如下: int BinSearch(SeqList R,int n,KeyType k) { int low=0,high=n-1,mid,count=0; while(low<=high) { mid=(low+high)/2; printf("第%d次查找:在[ %d ,%d]中找到元素R[%d]:%d\n ",++count,low,high,mid,R[mid].key); if(R[mid].key==k) return mid; if(R[mid].key>k) high=mid-1; else low=mid+1; } return -1; } 四、实验步骤与算法实现 #include #define MAXL 100 typedef int KeyType; typedef char InforType[10]; typedef struct { KeyType key; InforType data; }NodeType; typedef NodeType SeqList[MAXL]; int SeqSearch(SeqList R,int n,KeyType k) { int i=0; while(i { printf("%d",R[i].key); i++; } if(i>=n) return -1; else { printf("%d",R[i].key); return i; } } int BinSearch(SeqList R,int n,KeyType k) { int low=0,high=n-1,mid,count=0; while(low<=high) { mid=(low+high)/2; printf("第%d次查找:在[ %d ,%d]中找到元素R[%d]:%d\n ",++count,low,high,mid,R[mid].key); if(R[mid].key==k) return mid; if(R[mid].key>k) high=mid-1; else low=mid+1; } return -1; } int BinSearch1(SeqList R,KeyType k, int low,int high) { int mid; if(low>high) return -1; mid=(low+high)/2; if(k==R[mid].key) return mid; else if(k return BinSearch1(R,k,low,mid-1); else return BinSearch1(R,k,mid+1,high); } void main(){ SeqList R; int n=10; KeyType k=7; int a[]={1,5,3,4,2,6,7,11,9,10},i; for(i=0;i R[i].key=a[i]; printf("\n"); if((i=SeqSearch(R,n,k))!=-1) printf("\n元素%d的位置是%d\n",k,i); else printf("\n元素%d的位置不在表中\n",k); printf("\n"); if((i=BinSearch(R,n,k))!=-1) printf("\n元素%d的位置是%d\n",k,i); else printf("\n元素%d的位置不在表中\n",k); printf("\n"); if((i=BinSearch1(R,k,0,7))!=-1) printf("\n元素%d的位置是%d\n",k,i);