原理
在有序的数据中查找某个数,找出数组中间元素下标。
条件
这个只有在有序的条件下才适用
比如:买衣服不超过300块钱,范围就是0~300去猜,就是折半,猜150块钱,如果不是就晓得是猜大了还是猜小了,然后继续猜,比从0猜到300要好的多,这个要猜300次最多,所以二分法适用于在在有序的数据中查找某个数,特别是几个几个亿的那种,猜一下就减半了,二分查找也叫做折半查找。
代码
找7这个数字和他对应的下标为例。
#include<stdio.h>
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int sz = sizeof(arr)/sizeof(arr[0]);
int flag = 0;
int left = 0;//左下标
int right = sz - 1;//右下标
int mid = (left + right) / 2;//中间下标
int k = 7;//需要查找的数
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
{
flag = 1;
printf("找到啦,下标是%d,这个数是%d\n", mid,arr[mid]);
break;
}
}
if (flag == 0)
{
printf("找不到了\n");
}
return 0;
}
运行结果:
欧耶!!!!我学会啦!!!!!