#include <bits/stdc++.h>
using namespace std;
int ans[] = {1, 2, 3, 4, 4, 4, 4, 8, 9, 10};
int LowerBound(int left, int right, int x)
{
while(left < right)
{
int mid = (left + right) / 2;
if(ans[mid] < x)
{
left = mid + 1;
}else
{
right = mid;
}
}
return left;
}
int UpperBound(int left, int right, int x)
{
while(left < right)
{
int mid = (left + right) / 2;
if(ans[mid] > x)
{
right = mid;
}else
{
left = mid + 1;
}
}
return left;
}
int BinSearch(int left, int right, int x)
{
while(left < right)
{
int mid = (left + right) / 2;
if(ans[mid] == x)
{
return mid;
}else if(ans[mid] < x)
{
left = mid + 1;
}else
{
right = mid;
}
}
return left;
}
int main()
{
//int ans[] = {1, 2, 3, 4, 4, 4, 4, 8, 9, 10};
cout << LowerBound(0, 10, 4) <<endl; //输出:3
cout << UpperBound(0, 10, 4) <<endl; //输出:7
cout << BinSearch(0, 10, 4) <<endl; //输出:5
return 0;
}
对比几种二分方法
最新推荐文章于 2022-04-20 20:11:38 发布