五个二分搜索
来源:互联网 发布:join方法javascript 编辑:程序博客网 时间:2024/05/09 07:58
/*
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;
}
- 五个二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- HDU 1050 Moving Tables
- 1000瓶水,哪一瓶有毒?
- Linux+Python+Apahce+wsgi
- 普适计算应用:厨房里的Cyber指挥——Augmented Reality Kitchens
- Java系统程序员修炼之道
- 五个二分搜索
- C#自定义异常处理
- doc类,view类,frame类之间如何互相调用
- struts-——OGNL和VALUE STACK
- DTD 与 iframe
- mini2440(5) 2440init.s代码分段分析
- 有序数组中找出给定数字的出现次数
- 查询emp表入职时间(jointime)为2012-8到2012-9所有在职(zaizhi=1 )的员工,按照部门(deptno)、性别(sex)统计人数
- 提供JDBC连接