一、算法原理
整数二分算法(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;
}