代码如下:
char arr[] = { 1,2,3,4,5,6,7,9,10};
int left = 0; //定义首元素下标
int right = sizeof(arr) - 1; //定义尾元素下标
int mid = 0; //定义中间元素下标
int a = 0;
scanf("%d", &a); //输入要查找的值
for (left = 0; left <= right;) //开始查找
{
mid = left+(right-left)/2; //求出中间元素下标
if (a < arr[mid]) //将输入值与中间元素对比
{
right = mid - 1; //若小于中间元素,则向左缩小范围,即向左改变右下标
}
else if(a>arr[mid])
{
left = mid + 1; //同理,向右改变左下标
}
else
{
printf("找到了");
break; //若找到,则跳出循环
}
}
if (left > right) //判断是否完全查找完毕
printf("找不到");
具体思想:
1.确立目标:
在数组中查找与输入是否相同的元素,若有则打印 :找到了 ;否则 打印:找不到。
2.算法思想:
每次循环执行时将数组的中间元素与输入只进行对比 ,进而将下一次查找的范围缩小 ,
直至查找结束 。
3.注意事项:
循环的判定条件是:? 左下标? ?小于等于? ?右下标( left <=?right )
因为当左下标小于右下标时,说明中间还有未被查找的元素 ;?而当左下标等于右下标时,
中间可能还有 1 个元素未进行查找 ,如图:
|