l:是left的缩写;r:是right的缩写;m:是mid的缩写
//二分查找
#include<stdio.h>
int search(int a[], int n, int s)
{
int left = 0;
int right = s - 1; //right为下标
while (left <= right)
{
int mid = (left + right) / 2;
if (n < a[mid])
{
right= mid -1;
}
else if (n > a[mid])
{
left = mid + 1;
}
else
{
return mid;
}
}
return -1;
}
int main()
{
int num=0; //要查找的数字;
int arr[] = {11,12,23,24,35,36,37,48,49}; //二分查找只应用于有序数组
scanf_s("%d", &num);
int size = sizeof(arr) / sizeof(arr[0]);
//size为元素个数=数组总长/一个数组长度
int b=search(&arr,num, size);
if (b == -1) //输出-1就是找不到,防止和下标混淆
{
printf("找不到");
}
else
{
printf("找到了,下标为%d", b);
}
return 0;
}