【c语言】二分查找

本文介绍了如何在C++中实现二分查找算法,重点讲解了为什么要避免直接使用头加尾计算中间索引以防溢出,以及如何使用sizeof函数获取数组大小进行比较。
摘要由CSDN通过智能技术生成

二分查找总的一个概念是

头加尾,找到中间的数 随后判断中间的数是大了还是小了 

然后在找中间值

int townum(int arr[], int sz, int flag) {
//	int left = 0;
//	int right = sz - 1;
//	while (left<right)
//	{
//		int mid = left + (right - left) / 2;
//		int nummid = arr[mid];
//		if (nummid < flag) {
//
//			left = mid + 1;
//			
//		}
//		else if (nummid > flag) {
//			right = mid - 1;
//
//
//		}
//		else {
//			return mid;
//		}
//	}
//	return -1;
//
//
//
//}

那么这里为什么不是头加尾呢  因为如果两个值过大的话容易溢出 所以left+(right-left)/2和头尾相加除以2是一样的。

用sizeof函数来求出数组的大小 随后来判断目标值与mid下标的值的大小

源代码

int townum(int arr[], int sz, int flag) {
	int left = 0;
	int right = sz - 1;
	while (left<right)
	{
		int mid = left + (right - left) / 2;
		int nummid = arr[mid];
		if (nummid < flag) {

			left = mid + 1;
			
		}
		else if (nummid > flag) {
			right = mid - 1;


		}
		else {
			return mid;
		}
	}
	return -1;



}

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值