#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;
}
C语音在数组中找数字
原创qaq2333 ©著作权
文章标签 C语音在数组中找数字 文章分类 C/C++ 后端开发
©著作权归作者所有:来自51CTO博客作者qaq2333的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章