#include<stdio.h>
//二分查找法
int Dichotomy(int a[],int begin,int end,int number)
{
if(begin>end) //当开始的开始的下标移动超过了末尾下标
{
return -1;
}
int result; //判断是否查找到数值,取0或-1
int count=0;
int mid=(begin+end)/2; //取中间数
if(a[mid]==number)
{
return count; //返回比较次数
}
else if(number>a[mid])
{
count++;
result=Dichotomy(a,mid+1,end,number);
if(result==-1)
{
return -1;
}
else
{
return count + result; //返回二分法的比较次数和回归调用函数
}
}
else
{
count++;
result= Dichotomy(a,begin,mid-1,number);
if(result==-1)
{
return -1;
}
else
{
return count + result;
}
}
}
int main(int argc, char const *argv[])
{
int data[]={1,11,12,13 ,14,23,26 ,45,46,56,57,78,};
int number=45;
int len=sizeof(data)/sizeof(int);
int count=1; //在刚刚进去时就会比较一次
int j=0;
//普通查找
for (int i = 0; i < len; i++)
{
count++; //统计普通查找法的比较次数
if(data[i]==number)
{
break;
}
}
printf("%d\n",count);
//二分查找
//返回接收到比较次数
int newcount=Dichotomy(data,j,len-1,number);
if(newcount==-1)
{
printf("没有找到\n");
}
else
{
printf("%d\n",newcount); //打印比较的次数
}
return 0;
}
二分查找法和普通查找法的比较
最新推荐文章于 2024-08-09 16:47:28 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)