int binary_search(int x,int arrx[],int sz)
{
int left = 0;
//int right = (sizeof(arrx) / sizeof(arrx[0])) - 1;不能在函数里计算数组(参数)的大小
int right = sz - 1;
while (left <= right)//二分查找,left必须小于等于right
{
int mid = (left + right) / 2;//求中间元素的的下标必须在循环内的
if (x < arrx[mid])
{
right = mid - 1;
}
else if (x > arrx[mid])
{
left = mid + 1;
}
else
{
return mid;
}
}
return -1;
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,0 };
int n = 7;
int sz = sizeof(arr) / sizeof(arr[0]);
int ret = binary_search(n, arr,sz);//此时数组arr传参只传了第一个元素的地址
//使函数binary_search中的arrx变成指针,所以sizeof计算的是指针的大小,和操作系统有关系,32位4个字节,64位8个字节
if (ret == -1)
{
printf("没找到");
}
else
{
printf("找到了,下标是:%d", ret);
}
return 0;
}