相较于线性查找,二分查找在面对大量数据时的效率更高,但它的缺点是只能对有序数组进行查找。
源代码如下:
#include<stdio.h>
void binarysearch(int *a,int sum,int n)
{
int low=0;
int high=sum-1;
int key=n;
int mid=0;
int count=0;
while(low<=high)
{
count++;
mid=(low+high)/2;
if(key>a[mid])
{
low=mid+1;
}
else if(key<a[mid])
{
high=mid-1;
}
else if(key==a[mid])
{
printf("Success!\nAfter %d tries\na[%d]=%d",count,mid,key);
return ;
}
}
printf("No found");
}
int main(void)
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
printf("请输入你想要查找的数字\n");
int n;
scanf("%d",&n);
binarysearch(a,10,n);
}
这是程序的输出结果:
下面是对代码的讲解:
二分查找,顾名思义,就是每一次都拿要查找的值与数组的中间值进行比较
对最小数组下标,最大下标,目标值,中间值,以及计数器的声明。
循环入口判断low是否大于high,如果大于,则退出循环。
如果目标值大于a[mid],说明目标值比a[mid]左边的值都要大,下一次循环舍去左边的值--low=mid+1;
同理,如果目标值小于a[mid],说明目标值小于a[mid]右边的所有值,统统舍去--high=mid-1
直到key=a[mid]或者low>high
循环结束。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)