/*
1.找下标i使得X[i] = V
返回 i或者-1
*/
int BinarySearch(const int* X,int N,int V)
{
if(X==NULL) return -1;
int L=0,U=N-1,M;
while(L <= U)
{
M = L+((U-L)>>1);
if(X[M] == V) return M;
if(X[M] > V) U=M-1;
else L=M+1;
}
return -1;
}
/*
二分搜索
2.找 |最小| 下标i使得X[i] = V
返回 i 或者-1
*/
int BinarySearch_Min(const int* X,int N,int V)
{
if(X==NULL) return -1;
int L=0,U=N-1,M;
while(L+1 < U)
{
M = L+((U-L)>>1);
if(X[M] >= V) U = M;
else L = M;
}
if(X[L] == V) return L;
if(X[U] == V) return U;
return -1;
}
/*
二分搜索
3.找 |最大| 下标i使得X[i] = V
返回 i 或者-1
*/
int BinarySearch_Max(const int* X,int N,int V)
{
if(X==NULL) return -1;
int L=0,U=N-1,M;
while(L+1 < U)
{
M = L+((U-L)>>1);
if(X[M] <= V) L = M;
else U = M;
}
if(X[U] == V) return U;
if(X[L] == V) return L;
return -1;
}
/*
二分搜索
4.找 |最大| 下标i使得X[i] < V
返回 i 或者-1,(不存在)
*/
int BinarySearch_Less_Max(const int* X,int N,int V)
{
if(X==NULL) return -1;
int L=0,U=N-1,M;
while(L+1 < U)
{
M = L+((U-L)>>1);
if(X[M] >= V) U = M;
else L = M;
}
if(X[L] < V) return L;
return -1;
}
/*
二分搜索
5.找 |最小| 下标i使得X[i] > V
返回 i 或者-1,(不存在)
*/
int BinarySearch_Greater_Min(const int* X,int N,int V)
{
if(X==NULL) return -1;
int L=0,U=N-1,M;
while(L+1 < U)
{
M = L+((U-L)>>1);
if(X[M] <= V) L = M;
else U = M;
}
if(X[U] > V) return U;
return -1;
}