int find(int arr1[],int x,int y)
{
int left=0;
int right=y-1;
while(right>=left)
{
if(x>arr1[(left+right)/2])
left=(left+right)/2+1;
else if(x<arr1[(left+right)/2])
right=(left+right)/2-1;
else
return (left+right)/2;
}
return 0;
}
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9};
int sz=sizeof(arr)/sizeof(arr[0]);
int b=0;
int a=4;
if ((b=find(arr,a,sz))==0)
{
printf("找不到");
}
else
{
printf("下标是:%d\n",b);
}
return 0;
}
二分法数组查找函数,传递数组arr时,并不是传递数组所有元素,而是第一个元素的地址(此举为了节省空间),所以应该在主函数里求得数组的大小,然后传递给形参。否则求出来为1,地址占四个字节,一个元素占四个字节。
写代码时经常忘记left/right=(mid+-1)虽然没有影响,但会降低效率。