标签:数组 scan break 循环 define code 排除 fine amp
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
int k = 0;
int dgs = sizeof(arr) / sizeof(arr[0]);
//元素个数=总元素数量/单个元素
int left = 0; //左下标
int right = dgs - 1;
printf("输入一个数:\n");
scanf("%d", &k);
while (right >= left)
{
int mid = (left + right) / 2;
if (arr[mid] > k)
//假如k=4 arr[mid]得到6>4[6的底数为5],说明4在中间值mid的左边.并且六不等于四
//所以排除六这个中间值,也就是得到right=mid-1;减去mid这个中间值
{
right = mid - 1;
//左边元素=中间值-1.即[这个mid前面没有arr,所以他是个底数]
//5-1=4,所以得到此数在底数0-4之间,然后进行下一次循环
}
else if (arr[mid] < k)
//假如k=7 arr[mid]得到6<7[6的底数为5],说明7在中间值mid的右边.并且六不等于七
//所以排除六这个中间值,也就是得到right=mid+1;这边也是减去mid这个中间值
{
left = mid + 1;
}
else
{
printf("你找到了,底数是%d\n", mid);
break;
}
}
if (left > right)
{
printf("没有找到对应的数\n");
}
return 0;
}
标签:数组 scan break 循环 define code 排除 fine amp
原文地址:https://blog.51cto.com/14893161/2517524