#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//用函数判断一个数是不是在一个数组里面(二分法)
int binary_search(int arr[], int k, int sz)
{
int left = 0;
int right = sz - 1;
while (left <= right)
{
int mid = left + (right - left) / 2;
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid - 1;
}
else
{
return mid;
}
}
return -1;
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, };
printf("请输入一个数字,看他是否在数组里面:\n");
int k = 0;
scanf("%d", &k);
int mid = 0;
int sz = sizeof(arr) / sizeof(arr[0]);//arr数组传参时只传了第一个元素的地址,函数接收实质上相当于一个指针变量,若在函数里面计算sz大小,则为1或者2;所以只能在函数外面计算
//判断如果找不到则返回会-1
//如果找到的话则返回mid值,然后打印出来
int ret = binary_search(arr, k, sz);
if (ret == -1)
{
printf("找不到\n");
}
else
{
printf("找到了,下标为:%d\n", ret);
}
}