#include<stdio.h>
bool binarySearch(int length,int* a,int goal);
int main()
{
int a[50000]={0},b[50000]={0};
int length=0,number=0;
int i=0;
scanf("%d",&length);
for(i=0;i<length;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&number);
for(i=0;i<number;i++)
{
scanf("%d",&b[i]);
}
for(i=0;i<number;i++)
{
if(binarySearch(length,a,b[i]))
printf("Yes\n");
else printf("No\n");
}
return 0;
}
bool binarySearch(int length,int* a,int goal)
{
int low=0,high=length-1;
int mid;
while(low<=high)
{
mid=(high+low)/2;
if(a[mid]>goal) high=mid-1;
else if(a[mid]<goal)low=mid+1;
else return true;
}
return false;
}
编写中遇到的问题:
1、binarySearch()函数编写时 while条件 写成了 low<high 因而丢失了一些正确情况,如1 2 3 4 5中,查找2时,就会遇到 low=high的边界情况;
2、No写成了NO,不符合条件而过不去;
#include<stdio.h>
bool binarySearch(int length,int* a,int goal);
int main()
{
int a[50000]={0},b=0;
int length=0,number=0;
int i=0;
scanf("%d",&length);
for(i=0;i<length;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&number);
for(i=0;i<number;i++)
{
scanf("%d",&b);
if(binarySearch(length,a,b))
printf("Yes\n");
else printf("No\n");
}
return 0;
}
bool binarySearch(int length,int* a,int goal)
{
int low=0,high=length-1;
int mid;
while(low<=high)
{
mid=(high+low)/2;
if(a[mid]>goal) high=mid-1;
else if(a[mid]<goal)low=mid+1;
else return true;
}
return false;
}
这样子会省一些空间。