查找算法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关文档
最新文档