java实现二分查找法

    二分查找前提条件是存在一组数据已经排序好的, 目标值每次都只需要跟临界点那个值进行对比。

    当大于这个临界值则,取[临界值+1]~[右下标]的临界值,再跟目标值对比反复直至找到;当小于这个临界值则,取[左下标]~[临界值-1]的临界值,再跟目标值对比反复直至找到。

    代码简单的二分查找(注意退出的条件左下标大于右下标或者找到目标值):

    private static int test(int a[],int n) {
int left = 0;
int right = a.length - 1;
while(left <= right){
int temp = (right + left )/2;
if(a[temp] > n){
right = temp - 1;
}else if(a[temp] < n){
left = temp + 1;
}else if(a[temp] == n){
return temp;
}
}
return -1;

}

    代码通过递归二分查找(注意递归最重要的事退出递归的条件):

    private static int  test2(int a[],int n,int left,int right) {
if(left > right || n > a[a.length - 1] || n < a[0]){
return -1;
}
int temp = (left + right)/2;
if(a[temp] > n){
return test2(a , n , left , temp-1);
}else if(a[temp] < n){
return test2(a , n , temp + 1 , right);
}else{
return temp;
}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值