顺序查找算法算法实现代码
#include<stdio.h>
#define N 10
int array[N]={12,76,29,15,62,35,33,89,48,20};
int search(int array[],int key)
{
for(int i=0;i<N;i++)
{
if(key==array[i])
return i;
}
return 0;
}
int main()
{
int a;
a=search(array,35);
if(a)
{
printf(“查找的关键字35已经找到!它在表中的下标为:%d\n”,a);
}
else
printf(“该关键字不存在!\n”);
return 0;
}
折半查找算法算法实现代码
#include<stdio.h>
#define N 10
int array[N]={8,15,19,26,23,41,47,52,64,90}; //表排列有序,所以用折半查找
int search(int key,int array[])
{
int low=0;
int mid;
int high=N-1;
int ley=41; //要查找的关键字
while(low<=high)
{
mid=(low+high)/2;
if(array[mid]==key)
{
return mid;
}
else if(array[mid]>key)
high=mid-1;
else
low=mid+1;
}
return 0;
}
int main()
{
int a;
a=search(41,array);
if(a)
{
printf(“关键字:41已找到!该关键字在表中的下标为:%d\n”,a);
}
else
printf(“该关键字不存在 !\n”);
return 0;
}
分块查找算法实现代码
#include<stdio.h>
#define n 12
#define s 3 //每块的长度
int b=n/s; //分成的块数
int R[n]={10,8,11,30,28,31,45,36,40,50,69,65};
typedef struct
{
int kmax;
int link;
}idex;
idex indtb[4];
void Builsearch(int R[],idex indtb[])
{
int j=0;
int k=0;
int m=s;
int max=0;
for(int i=0;i<b;i++)
{
indtb[i].link=j;
j=j+s;
}
for(i=0;i<b;i++)
{
for(k;k<m;k++)
{
if(R[max]<R[k])
max=k;
}
indtb[i].kmax=R[max];
max=(i+1)*s;
k=(i+1)*s;
}
}
int search(int R[],idex inbtb[],int k)
{
int b1,b2,low,height,mid;
low=0;
height=b-1;
while(low<=height)
{
mid=(low+height)/2;
if(k<=indtb[mid].kmax)
{
height=mid-1;
}
else
{
low=mid+1;
}
}
if(low<=b)
{
b1=indtb[low].link; //取块对应起始地址
if(low==b)
{ //确定块末地址
b2=n;
}
else
{
b2=indtb[low+1].link-1;
}
while(b1<=b2)
{
if(R[b1]==k)
return b1;
else
b1++;
}
}
return 0;
}
int main()
{
int find;
Builsearch(R,indtb);
find=search(R,indtb,28);
if(find)
{
printf(“关键字找到!位置为:%d\n”,find+1);
}
else
printf(“没有找到!\n”);
return 0;
}