【小白系列】 简单的二分查找思想

目录

1.前言

2.举例讲解

2.1 简单举例

2.2 代码示例

3. 易错点

4.结语


1.前言

为了提高查找的效率,在查找方法上引入了二分查找的思想。比起一个一个地核对,二分查找具有高效,快捷的特点,下面以在有序数组中查找某元素下标为例,浅谈二分查找。

2.举例讲解

2.1 简单举例

例如我们要找数组中 8 这个元素的下标。

用二分查找的思想,我们先会“ 折半 ” 

因为下标首尾的均值为4(整形计算)。所以我们会先用5与8相比,此时5比8小。

于是进行下一步操作

 首尾巴下标4+7 的均值为6。于是我们会用7与8比,此时7<8。

下一步

 下标均值(6+9)为7,此时8=8。于是找到了目标元素的下标7。

可以看到一共比较了3次,如果按传统的方法来查找会查找7次(从0到7);

二分查找无疑大大提高了查找速度。

2.2 代码示例

我们先随便弄一个有序数组,然后确定到底要找哪个元素的下标。

#include <stdio.h>
int main()
{   //准备一个有序数组
	int arr[10] = { 0,1,2,3,5,8,9,10,19,20 };
    //确定要查找的元素
	int k = 0;
	scanf("%d", &k);
	printf("\n");
    //计算数组元素个数
	int len = sizeof(arr) / sizeof(arr[0]);
}

可以直接编写代码进主函数,也可用函数进行查找;

这里我用函数来讲解;(找不到元素那里会有一个bug,实力有限,大家谅解啦)

评论可以提一下怎么解决哦。

#include <stdio.h>
void FIND(int ARR[], int LEN,int K)
{
    //建立左右下标确定查找区间
	int left = 0;
	int right = LEN - 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 if (ARR[mid] == K)
		{
			printf("找到了,下标是%d", mid);
			break;
		}
	}
	if (left > right)
	{
		printf("找不到该元素下标");
	}
}
int main()
{   //准备一个有序数组
	int arr[10] = { 0,1,2,3,5,8,9,10,19,20 };
    //确定要查找的元素
	int k = 0;
	scanf("%d", &k);
	printf("\n");
    //计算数组元素个数
	int len = sizeof(arr) / sizeof(arr[0]);
    //建立函数进行查找
    FIND(arr,len,k);
}

同样的,left表示左下标,right表示右下标。

ag:

 二分一次

 逻辑参考2.1不过多赘述。

解释一下为什么判断完后要mid±1。

因为如果ARR[mid]!=K;那么此时的下标mid对应的数组元素肯定不满足条件,±1进入下一个或上一个元素,这样可以界定新的未知区间。

同时当左右下标相邻时,下一次不会进入取均值死循环的状态。

3. 易错点

1.判断部分是循环,不能忘记break语句。

2.左坐标大于右坐标需要在循环外,不能写入循环中。

4.结语

这就是二分法思想的简单运用。希望各位小点关注,我会继续更新小白系列,这个系列也是我从小白到大白的实况记录,希望与各位共进步!!!

  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Laxinues

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值