<h2>二分查找</h2>
==逻辑==:
==思路==:
- 双指针,一个指向数组首地址,一个指向数组尾
- 循环,条件是如果右边永远大于左边的值
- 计算中间值
- 判断中间值与目标值的大小
- 如果中间值小于目标值,就把中间值赋给left
- 如果中间值大于目标值,就把中间值赋给right
- 循环执行,找到返回目标值的下标加一,找不到,返回负一
<h3>代码实现</h3>
#include <stdio.h>
#include <stdlib.h>
//search函数的实现
int search(int arr[], int arrsize, int target)
{
//1.双指针,一个指向数组首地址,一个指向数组尾
int left = 0;
int right = arrsize - 1;
int middle = 0;
//2.循环,条件是如果右边永远大于左边的值
while (right >= left)
{
//3.计算中间值
middle = (right + left) / 2;
//4.判断中间值与目标值的大小
//4.1 如何相等直接返回
if (arr[middle] == target)
return middle + 1;
//4.2 如果中间值大于目标值
if (arr[middle] > target)
right = middle;
//4.3 如果中间值小于目标值
else
left = middle;
}
//查找失败
return -1;
}
int main()
{
//准备排序好的数组,从大到小,从小到大都可以,此处用的是从小到大
int arr[] = { 0,1,2,3,4,5,6,7,8,9 };
//打印返回值 -1--->没找到,否则返回下标加一
printf("%d\n", search(arr, sizeof(arr) / sizeof(int), 8));
system("pause");
return 0;
}
<h3>运行截图</h3>
|