题目描述:使用二分查找在整型有序数组中查找想要的数字,找到了返回下标。
代码如下:
// #include: 头文件包含命令
// stdio.h: standard input & output 标准输入输出头文件,下面的printf输出函数需要用到
#include <stdio.h>
int find(int arr[], int left, int right, int num)
{
int mid = 0;
while (left <= right)
{
mid = (left + right) / 2; // 取到左右位置的中间位置
if (arr[mid] > num) // 如果中间位置的数大于要寻找的数,就将中间位置的前一个位置认为是右边界
{
right = mid - 1;
}
else if (arr[mid] < num) // 如果中间位置的数小于要寻找的数,就将中间位置的后一个位置认为是左边界
{
left = mid + 1;
}
else // 如果相等,该中间位置就是要寻找数的下标
{
return mid;
}
}
return -1;
}
int main()
{
int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // 创建一个整形数组
int left = 0; // 该数组最左边元素的下标
int right = sizeof(array) / sizeof(array[0]) - 1; // 该数组最右边元素的下标:数组长度-1
int num, ret; // num:要寻找的数,ret:需要寻找的数的下标
printf("请输入要寻找的数:\n");
scanf("%d", &num);
ret = find(array, left, right, num);
if (ret >= 0)
{
printf("找到了,下标为:%d\n",ret);
}
else
{
printf("没有找到(-_-)\n");
}
return 0;
}
运行结果: