假定我们给出一个有序的一组数{1,2,3,4,5,6,7,8,9,10},那么要想在这组数中找到你想要的数字(我们假设要的是7),最简单的办法就是拿7与这组数中的每一个数字进行比较。
但是当数组中的数太多的时候,这样的方法显示有些鸡肋,那有没有更好的方法呢
答案肯定是有的——二分查找
跟二分查找的名字一样,我们首先要做的就是先把这个数组分成两分,取中间值与要找的值进行比较,如果中间值小于我们要找的数字那么就可以直接pase掉中间值左边的数据
这基本上就是我们二分查找的基本思路了
下面用代码来实现
#include <stdio.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9 };
int sz = sizeof(arr) / sizeof(arr[0]);//数组的元素个数
int left = 0;//左下标
int right = sz - 1;//右下标
//输入要找的数字
int n = 0;
printf("请输入一个1-9的数字:\n");
scanf("%d", &n);
while (left <= right)
{
int mid = (left + right) / 2;//确定中间值
if (arr[mid] < n)
{
left = mid + 1;
}
else if (arr[mid] > n)
{
right = mid - 1;
}
else
{
printf("找到了下标是%d", mid);
break;//找到之后break直接跳出循环
}
}
if (left > right)
{
printf("找不到\n");
}
return 0;
}
有什么不懂的可以给我评论留言,或者私信给我,长期在线
高质量内容持续更新中