1.好处
二分查找(折半查找)效率高,时间复杂度低,但是仅能用于有序数组
2.代码及其逻辑
二分查找的逻辑就是通过我们想要找到的值与中间量(mid)作比较,来不断缩小范围,如果说我们想要查找的值比中间量要大,那么我们就会取前半个区间,在进行一次与中间量的比较,不断的循环,就能找到我们想要查找的那个值,代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,11,13,15};
int sz = sizeof(arr) / sizeof(arr[0]);
int right = sz - 1;
int left = 0;
int k = 0;
scanf("%d",&k);
while(left <= right)
{
int mid = (left + rgiht) / 2;
if (arr[mid] < k)
left = mid + 1;
else if (arr[mid] > k)
right = mid - 1;
else
{
printf("找到了,下标是%d",mid);
break;
}
if (left > right)
printf("查找错误");
return 0;
}
这段代码中,left代表我们所取的区间中的最小值的编号,right则是最大值的编号,mid就是中间量,在刚刚开始查找时,先让我们想要查找的值与中间量arr[mid]进行比较,如果k > arr[mid],那么此时我们就应该把范围缩小,及left应该要等于mid + 1,这样我们的查找范围就缩小了一半,同理,当arr[mid] > k 时,我们就应该让right = mid - 1,如果正好arr[mid] = k,那就可以直接输出结果,到这里我们才算完成了一次查找,但一般情况下一次查找不能完成任务,所以我们要进行多次查找,当left < right时,就说明还有数组中还有元素没有查找到,以循环条件就是当left <= right进入循环,当letf > right 时,就说明该数组中没有我们要查找的元素,此时就可以输出结果,查找错误(这里没有考虑内存溢出的问题,就是非常浅薄的对二分查找的一个说明)
标签:二分,arr,right,int,mid,查找,left From: https://blog.csdn.net/a15879106694/article/details/143096077