题目要求:在一个升序数组中查找指定的数值,找到了就返回下标,找不到就返回 "没找到".
总体代码如下:
void Append(int arr[],int len)
{
for (int i = 0; i < len; i++)
{
arr[i] = i + 1;
}
}
void Examine(int key ,int arr[], int len)
{
int left = 0;
int right = len - 1;
while (left <= right)
{
int mid = (left + right) / 2;
if (key > arr[mid])
{
left = mid + 1;
}
else if (key < arr[mid])
{
right = mid - 1;
}
else
{
printf("找到了,它的下标是%d",mid);
break;
}
}
if (left > right)
{
printf("没找到");
}
}
int main()
{
int arr[10] = { 0 };
int len = sizeof(arr) / sizeof(arr[0]);
int key = 0;
scanf("%d", & key);
//给数组添加元素
Append(arr, len);
Examine(key,arr, len);
return 0;
}
总体思路:
1.初始化一个1-10的整数数组,使用sizeof函数求出数组中元素的个数,同时使用scanf函数输入想要查找的数
2.以上图为参考,创建Examine函数,并传入key,arr,len。首先创建两个变量:left = 0 ,right = len - 1 。
3.进入循环,创建变量mid = (left + right) / 2,然后使用if语句来判断,arr[mid]和key的大小关系,如果 arr[mid] <mid,则left = mid + 1,再如果arr[mid] >mid,则right = mid - 1,其他的则打印找到了,下标为什么,然后依次类推,类推的图如下。