/*
需要注意:
①推荐l = mid, r = mid的使用
②因为r的值永远取不到,r的值需要大1
③最后返回时,需要做一次判断
其实做题时候,找个临界状态判断一下即可
*/
int bsearch(int left, int right, int x)
{
int l = left,
r = right;
for(l + 1< r)
{
int mid = (l + r) / 2;
if(A[mid] < x) l = mid;
else if(x < A[mid]) r = mid;
else return mid;
}
if(A[l] == x) return l;
else return -1;
}
int lsearch(int left, int right, int x)//返回第一个
{
int l = left,
r = right;
for(l + 1< r)
{
int mid = (l + r) / 2;
if(A[mid] < x) l = mid;
else if(x <= A[mid]) r = mid;
}
if(A[r] == x) return r;
else return -1;
}
int bsearch(int left, int right, int x)//返回最后一个的下一个
{
int l = left,
r = right;
for(l + 1< r)
{
int mid = (l + r) / 2;
if(A[mid] <= x) l = mid;
else if(x < A[mid]) r = mid;
}
if(A[l] == x) return l + 1;
else return -1;
}
二分法
最新推荐文章于 2023-07-27 17:38:38 发布