#include <stdio.h>
//定义一个函数,输入参数有三个,第一个是数组内容,第二个是需要查找的数,第三个是数组长度
int search(int arr[], int x, int length)
{
int left = 0;
int right = length - 1;
//while 循环,当左边的数小于右边的数时,一直查找,直至二者相等,循环结束
while (left <= right)
{
//避免左边+右边的值溢出
int mid = left + (right - left) / 2;
//如果中间的数小于要查找的数,那么中间和它左边的数就都不是,中间的数成为下一次最左边的数
if (arr[mid] < x)
{
left = mid + 1;
}
//如果中间的数大于要查找的数,那么中间和它右边的数就都不是,中间的数成为下一次最右边的数
else if(arr[mid]>x)
{
right = mid - 1;
}
//如果中间的值 刚好是要查找的值,直接返回中间值
else
{
return mid;
}
}
//while循环结束后,如果还没查找到,返回一个-1
return -1;
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int x = 4;
int length = sizeof(arr) / sizeof(arr[0]);
//调用函数部分
int xiabiao = search(arr, x, length);
//判断下标返回值大小
if (xiabiao == -1)
{
printf("未找到该数字\n");
}
else
{
printf("%d的下标是:%d\n",x, xiabiao);
}
system("pause");
return 0;
}