要求:写代码可以在整型有序数组中查找想要的数字,找到了打印“找到了”并返回下标,找不到打印“找不到”。
代码如下:
#include<stdio.h>
#include<stdlib.h>
int main ()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int k = 7;
int left = 0; //左下标
int right = sizeof(arr)/sizeof (arr[0])-1; //右下标
while(left <= right) //当左下标小于等于右下标的时候,可以进入while循环进行查找
{
int mid = left+(right-left)/2; //我们所想要找的中间数的下标
if(arr[mid] == k) // 如果找的中间值是我们所期望的7,则找到了,并且打印出这个中间值的下标
{
printf("找到了:%d\n",mid);
break;
}
else if(arr[mid]>k) // 如果找到的中间值大于我们要找的数字7;
{
right = mid - 1; //重新定义一个右下标(中间值往左推一位,缩小范围);
}
else // 如果找的中间值小于要找的数字;
{
left = mid + 1; //就重新定义一个左下标(中间值向右走一步,成为新定义的左下标,靠近所找的数,同样是缩小范围);
}
}
if(left>right )
printf("找不到\n");
system("pause");
return 0;
}
根据代码,运行结果为:
返回所找数的下标。
如果为k重新赋值为13(数组元素之外),则运行结果为: