二分法
二分法是一种查找方式,它的查找需要注意几个方面:
1.必须查找的是有序的序列。
2.可以查找某一个数,或者某一个数的下标。返回的值可以是要查找的数,或者与要查找的数接近的数。
简单来讲就是一直一半一半的取,直到找到最后的答案(flag=1),或者返回 flag=0。flag为标记变量,用来记录是否找到了结果。
下面来看来看例题,其实就是一个裸的二分法代码:
下面是实现的代码:
#include<stdio.h>
#include<string.h>
long long a[1000000];
void cha(long long t,long long n)
{
long long left,right,mid,i,j,flag=0;
left=0;
right=n-1;
while(right>=left)
{
mid=(right+left)/2;
if(a[mid]>t)
right=mid-1;
else if(a[mid]<t)
left=mid+1;
else
{
flag=1;
printf("YES\n");
break;
}
}
if(flag==0)
{
printf("NO\n");
}
}
int main()
{
long long i,j,k,n,t;
while(scanf("%lld",&n)!=EOF)
{
memset(a,0,sizeof(a));
for(i=0; i<=n-1; i++)
{
scanf("%lld",&a[i]);
}
scanf("%lld",&t);
cha(t,n);
}
return 0;
}