目录
1.简单原理
2.代码实现
1.简单原理
想必学过C语言的各位都听说过二分查找的算法,今天我就给各位萌新介绍一下二分查找的简单原理和代码实现。
我们使用数组的方式实现二分查找的目标,我们取一串有序数组的中间数组元素,再将此数组元素大小与查找数组比较,再判断是否找到和下一查找区间。使用这种方式可以大大提高我们算法的效率,相比与遍历数组的方法减少了查找次数,也减少了查找时间。下面我们介绍具体代码实现。
2.代码实现
我们先设置一个有序数组,如下所示
int arr[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13 };
接下来我们利用sizeof的方式算出数组长度大小,并且初始第一次查找的下标left和right(注意,最后一个数组下标为数组长度-1),如下图所示
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = sz - 1;
我们再设置一个mid值,作为与被查找数据比较的对象,我们在循环体中将这个值赋为(left+right)/2。重点!!重点!!重点!!我们将两者比较后需要调整left和right的值。若查找数值与mid相等,则此mid下标就是需要查找数值的位置,若查找数值大于mid,我们将left重新赋值为mid+1,若查找数值小于mid,则将right赋值为mid-1,我们将此算法用在一个while循环中,若left<=right证明数组中还存在待查找元素,所以我们使用这一条件作为循环判断条件。下面是全部代码。
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13 };
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = sz - 1;
int a = 0;
int mid = 0;
scanf("%d", &a);
while (left <= right)
{
mid = (right + left) / 2;
if (a > arr[mid])
left = mid + 1;
if (a < arr[mid])
right = mid - 1;
if(a==arr[mid])
{
printf("找到了,下标是%d", mid);
break;
}
}
if (left > right)
printf("找不到了");
return 0;
}
感谢大家的阅读,欢迎各位点赞评论,互关互助,有赞必回,祝各位万事如意。