二分查找算法

二分查找算法也许是数据结构与算法的一大重要部分,但是在C语言中,我们在解决数组问题时,也要学会灵活应用二分查找法,这样会使我们的代码量大大降低,那么让我详细讲解一下二分查找吧!!!

用代码说话吧!!

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 7;//如果要找到数组里面的7
	int sz = sizeof(arr) / sizeof(arr[0]);//算出数组元素的个数
	int left = 0;//第一个元素的下坐标
	int right = sz - 1;//最后一个元素的下坐标
	while (left <= right)//当left<=right,表示他们之间还有元素可以查找,
    //而=就是如果数组中有想要找的数,
    //可能就是在left=right时取得的坐标,如果忘了加上等于号,那就有可能找不到了。
	{
		int mid = (left + right) / 2;
		if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else
		{
			printf("找到了,下坐标是:%d\n",mid);
		}
	}
	if (left > right)
	{
		printf("找不到\n");
	}
	return 0;
}

 由此,我以画图的形式让大家更加理解

其实二分查找的思想在这也是完美的体现, 不断的缩小范围,来更加高效的找到元素,其实大家可能最不懂的是为什么left=right也在while循环中,其实就是为了防止我们要找的元素的下坐标刚好是在left=right时,这样才可以打印出下坐标!!

讲到现在,我相信大家肯定会对二分查找有个更好的理解,如果以上的内容还有不懂的,随时可以私信我,我这加我的QQ:2744827565,本人一定会及时做出回应!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值