矩阵二分查找 java6,二分查找算法及变种的编码实现

个人总结的几个变种(只是为了描述算法本身,为了简单不考虑越界等等异常情况),欢迎补充。

/*

二分查找的前提是数组有序

二分查找的时间复杂度:O(lgn)

以下列出二分查找的三种动机:

1、查找满足条件的关键字的位置

2、查找满足条件的最小位置

3、查找满足条件的最大位置

找不到返回-1,找到了则返回位置

*/

//动机1(原始模型):查找满足条件的关键字的位置

int BinarySearch(int *a,int l,int r)

{

int m;

while(l<=r)

{

m=(l+r)/2;

if(a[m]==key)

return m;

if(a[m]>key)

r=m-1;

else

l=m+1;

}

return-1;

}

//动机2:找满足条件的最小位置

int BinarySearch(int *a,int l,int r)

{

int m,ans=-1;

while(l<=r)

{

m=(l+r)/2;

//满足条件

if(ok())

ans=m,r=m-1;

else

l=m+1;

}

return ans;

}

//动机3:找满足条件的最大位置

int BinarySearch(int *a,int l,int r)

{

int m,ans=-1;

while(l<=r)

{

m=(l+r)/2;

//满足条件

if(ok())

ans=m,l=m+1;

else

r=m-1;

}

return ans;

}

//动机2、3十分相似,举一种常用情况:找小于等于某数的最大位置

int BinarySearch(int *a,int l,int r,int key)

{

int m,ans=-1;

while(l<=r)

{

m=(l+r)/2;

if(key>=a[m])

ans=m,l=m+1;

else

r=m-1;

}

return ans;

}

//变型1:找满足条件的最小数(double)

double BinarySearch(double l,double r)

{

double m,ans;

//保留n位小数就让精度为n+1位,比如要求保留3位小数就让精度为4位

while(r-l>=0.0001)

{

m=(l+r)*0.5;

if(ok())

ans=m,r=m;

else

l=m;

}

return ans;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值