【C++学习第三天】(1)二分算法

一、算法原理

整数二分算法(Integer Binary Search Algorithm)是一种用于在有序整数数组中查找特定元素的搜索算法。它利用了数组已排序的特性,通过不断缩小搜索范围来快速定位目标元素的位置。

整数二分算法的基本思想是将搜索区间分成两部分,然后确定目标元素可能存在的那一部分,并继续在该部分进行二分查找。

时间复杂度为O(log n),其中n为数组的大小。由于每一次迭代都将搜索范围减半,因此算法的效率非常高。它在大规模的有序整数数组中查找目标元素时非常实用。

二、代码

bool check(int x) {/*****/}  //检查x是否满足某种性质

/*********************整数二分*********************/
//适用情况:区间[l,r]被划分成[l, mid]和[mid+1, r]
int bin_search_1(int l, int r){
	while(l < r){
		int mid = l + r >> 1;
		if(check(mid))
			r = mid;
		else
			l = mid + 1;
	}
	return l;
}

//使用情况:区间[l,r]被划分成[l, mid-1]和[mid, r]
int bin_search_2(int l, int r){
	while(l < r){
		int mid = l + r + 1 >> 1;
		if(check(mid))
			l = mid;
		else
			r = mid - 1;
	}
	return l;
}

/*********************浮点数二分*********************/
double bin_search_3(double l, double r){
	const double eps = 1e-6;
	while(r - l > eps){
		double mid = (l + r) / 2;
		if(check(mid)) 
			r = mid;
		else
			l = mid;
	}
	return l;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值