顺序查找,折半查找,分块查找

顺序查找算法算法实现代码
#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;
}
在这里插入图片描述


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值