VS2019实现二分查找
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9};
while (1)
{
int k;
printf("请输入一个整数:");
scanf("%d", &k);
int sz = sizeof(arr) / sizeof(arr[0]);
int ret = binarry_search(arr, k,sz);
if (ret == -1)
{
printf("%d不存在\n", k);
}
else
{
printf("存在,下标是:%d\n", ret);
}
}
return 0;
}
int binarry_search(int arr[],int k,int sz)
{
int left = 0;
int right = sz-1;
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid]>k)
{
right = mid - 1;
}
else
{
return mid;
}
}
return -1;
}
使用二分查找的前提是有序数列,该代码是通过构造binarry_search(int arr[],int k,int sz)函数实现,有以下几点要注意:
1.传入函数binarry_search的参数sz要在main函数中得出结果,写成binarry_search(int arr[],int k)是错误的,int arr[]传入的并非使整个main中的全部数组,是arr[0]地址,也就是相当于起一个指针的作用。
2.int mid = (left + right) / 2要放在while循环中,不可放在while循环之外,因为mid是动态变化的,放在while循环之外意味着mid只跟新一次。
3.while (left <= right),不可写成left,以本文中的代码为例,当输入k=4时,left依次为0、1、2、3,right依次为8、3。当left=right不成立时,结果是“不存在”,显然与实际矛盾。
ps:新手写博客,感谢bilili比特鹏哥的免费输出,本博客主要来自整理比特鹏哥的视频加上自己的小结,欢迎各位大佬批评指正ヾ(◍°∇°◍)ノ゙!!

浙公网安备 33010602011771号