在有大量数据要查找的时候,二分法很不错
通过与中间值的比较下标逐渐缩小查找范围,最终确定在一个数的下标上
随着每一轮范围的缩小,mid的值也在改变
//在有序排列的数中找(二分法)
#include <stdio.h>
int main() {
int arr[] = {1,2,3,4,5,6,7,8,9,10 };
int k;
int sz = sizeof(arr) / sizeof(arr[0]);//得到数组长度
int right = sz - 1;//从0开始算,所以-1
int left = 0;
while (left <= right)//确保永远数可以查找,不同版本也可以写成left<right
{
scanf("%d",&k);//输入要查找的数组
int mid = (left + right) / 2;//mid得到的也是整数[mid],中点
//每一轮循环mid的值都改变了
if (arr[mid] < k)//中点在要找的数左边
{
left = mid + 1;
}
if (arr[mid] > k) //中点在要找的数右边
{
right = mid - 1;
}
else//找到了,跳出循环
{
printf("找到了,下标是%d\n",mid);
break;
}
}
if (left > right)
{
printf("找不到了\n");
}
}