//二分查找
//只适合有序整数数组
int efcz(int arr[],int sz)
{
int key = 0;//输入需要查找的值
scanf("%d", &key);
int a = 0;//中间值
int left = 0;//左下标
int right = sz - 1;//右下标
while (left < right)
{
a = (right + left) / 2;//先计算出第一次中间值
if (arr[a] < key)
{
left = arr[a] + 1;//因为只判断小于,所以可以加一
} //不写也没事,下面同理
else if (arr[a] > key)
{
right = arr[a] - 1;
}
else
{
return a;//等于就返回下标a
}
}
return -1;
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//计算函数的长度
int sz = sizeof(arr) / sizeof(arr[0]);
int b = efcz(arr, sz);
if (b == -1)//判断返回值并输出
{
printf("找不到下标");
}
else
{
printf("找到了下标是%d", b);
}
return 0;
}