生活中是否遇见过这样的问题?例如你的好朋友买了一双鞋,他说不超过500块钱,让你猜一猜这双鞋价值多少钱?你每次猜一个数,他都会告诉你价格是高了还是低了,那我们要怎么猜才能快速才对呢?答案是对半猜,通过对价格高低的判断,从而猜对价格。
放在C语言当中,对于给定一个有序的数组,通过中间数组值的大小,就能每次缩短一半的范围,从而很快找出,详见代码。
#include <stdio.h>
int main()
{
int num[] = { 0,1,2,3,4,5,6,7,8,9 }; //查找的数组
int search = 6;//需要查找的数
int left = 0;
int right = sizeof(num) / sizeof(num[0]) - 1;
int mid = 0;//记录中间元素的下标
int find = 0; //记录是否能够查找到
while (left<=right)
{
mid = (right + left) / 2;
if (num[mid] > search)
{
right = mid - 1;
}
else if (num[mid] < search)
{
left = mid + 1;
}
else
{
find = 1;
break;
}
}
if (1 == find)
{
printf("找到了,下标是%d\n",mid);
}
else
{
printf("找不到\n");
}
return 0;
}