给定一串数组,我们只需要用二分法来查找这个数;二分法对于查找一个数组中的一个元素具有高效性。
如下图所示
我们只要找到最左的下标和最右的下标;通过第一次使用二分法,mid就等于(9+0)/2,而arr[mid]<num,便可以将范围缩小到mid+1——right之间,然后重复使用二分法便可以得到这个数的下标了。
#include <stdio.h>
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9,10}; //输入有序数组
int left = 0; //定义数组最左边的下标
int size = (sizeof(arr) / sizeof(arr[0]));//计算数组中有几个数
int right = size-1; //最右边的数的下标
int num = 7; //给定要找的数
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] < num)
left = mid + 1;
else if (arr[mid] > num)
right = mid - 1;
else
{
printf("找到了,这个数的下标是%d\n", mid);
break;
}
}
if (left > right)
{
printf("找不到");
}
return 0;
运行结果如下图所示: