int sz=sizeof(arr)/sizeof(arr[0]);这个只能在main里,
因为数组传参时传的是数组首元素的地址,而不是整个数组,
所以在函数内计算int sz是不靠谱的。
我这个代码到底错在哪了?
#include<stdio.h>
//求函数素数
int binary_search(int arr[],int k,int sz)
{
int left=0;
int right=sz-1;
while(left<=right)
{
int mid=left+(right-left)/2;
if(arr[mid]<k)
{
left=mid+1;
}
else if(arr[mid]>k)
{
right=mid-1;
}
else
{
return mid;//找的返回下标
}
}
return -1;//不是0,是因为如果找的是1返回的是0值, 容易误解
}
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9,10};
//0,1,2,3
int k=7;
int sz=sizeof(arr)/sizeof(arr[0]);
int ret=binary_search(arr,k,sz) ;//需要这三个值
if (ret==-1)
printf("找不到");
else
printf("找到了,下标:%d",ret);
return 0;
}




