#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<string.h>
int binary_search(int Add[], int x,int sz)//binary_search-二分查找
//()中的Add[]本质上是个指针,指针变量的大小是4或者8个字节
{
int left = 0;//左下标
int right = sz - 1;//右下标
int mid = 0;//中间值的下标
while (left <= right)//控制左右下标在宿主内
{
mid = (left + right) / 2;//确定区域的中间值下标
if (x > Add[mid])//判断该值是否在区域的右半边
{
left = mid + 1;//调整右下标
}
else if (x < Add[mid])//判断该值是否在区域的左半边
{
right = mid - 1;//调整左下标
}
else
{
return mid;//找到该值在数组中的位置时,返回该值的下标
}
}
return -1;//若没有在数组中找到该值,返回-1
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);//数组的元素个数最好先在函数外算好
printf("请输入数字:");
scanf("%d", &i);
if(binary_search(arr,i,sz)==-1)//传递进去的是数组arr首元素的地址,所以函数中的数组大小与我们传递进去的数组大小不相同
//因此不要在函数内部计算数组大小
{
printf("找不到\n");
}
else
{
printf("找到了下标是%d\n", binary_search(arr, i,sz));
}
return 0;
}