#include<stdio.h>
//注意!!!这里的形参数组arr是一个指针变量,接收的是实参数组arr的第一个元素地址
//形参数组arr可以通过第一个数组元素地址找到后面的所有元素
//数组传参本质上传递的是数组首元素的地址,而不是整个数组
//补充说明:在函数内部计算一个函数参数部分的数组的元素个数是不行的
int binary_search(int arr[], int x, int sz)
{
//需要左右的下标
int left = 0;
int right = sz - 1;
//加上循环,知道找到k值的下标
while(left <= right)
{
//创建变量mid接收平均值
int mid = left + (right - left)/2;
//进行判断
if(arr[mid] > x)
{
//让平均值减一,赋予左下标或者右下标,
//这就实现了数组元素减半
right = mid - 1;
}
else if(arr[mid] < x)
{
left = mid + 1;
}
else
{
return mid;
}
}
return -1;
}
int main()
{
int arr[20] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//计算数组arr的长度
int sz = sizeof(arr)/sizeof(arr[0]);
int x = 11;
//创建变量接收函数的返回值
//注意!!!这里的实参数组arr是以地址形式传输
int down = binary_search(arr, x, sz);
//进行判断,如果down是-1则是没有找到,反之则是找到了
//返回值-1是自定义函数中我们自己设计的,-1代表的含义是由我们写代码的人自己赋予的
//-1你也可以定义成其他的,但是在这个程序中不能定义为0或以上的数字,因为数组的下标一般都是整数
//所以要注意自定义返回值含义时,这个含义是否符合这段程序
if (down == -1)
{
printf("没有找到该数");
}
else
{
printf("找到了,该数的下标为:%d", down);
}
return 0;
}
希望对你们有所帮助。