在有序数组中用二分查找
二分查找的前提是在有序的数组下进行
当我们要在有序数组下查找,我们就可以选择二分
二分查找用函数实现部分
int Seek(int arr[], int k, int sz)
{ //k是要查找的数
int left = 0;//左下标
int right = sz - 1;//右下标
while (left <= right)//判断条件
{
int mid = left + (right - left) / 2;//中间下标
if (arr[mid] < k)//如果中间下标小于我们要找到就更改left
{
left = mid + 1;//这里的mid+1,是mid本身不是要找的我们可以选择+1,也可以不选择加一
}
else if (arr[mid] > k)//同理,跟上面一样
{
right = mid - 1;
}
else
{ //这边就是找到了返回下标
return mid;
}
}
//当循环停止,前面没有return mid,说明了没有找到k;返回-1,选择-1是因为下标不会是负数
return -1;
}
``
```c
int main()
{ //主函数的实现
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int k = 0;//查找k,找到返回下标,没有找到返回-1
scanf("%d", &k);
int sz = sizeof(arr) / sizeof(arr[0]);
int ret = Seek(arr, k, sz);
if (ret != -1)
{
printf("找到了下标是:%d\n", ret);
}
else
{
printf("没有找到\n");
}
return 0;
}
这里我找数组arr里的10,找到了它的下标就是9;