Java语言基础-12.二分法查找

二分法查找

int low = 0;
int high = arr.length-1;
int mid = -1;
while(low<=high){
    mid = (low+high)/2;
    if(arr[mid]<value){
        low = mid + 1;
    }else if(arr[mid]>value){
        high = mid - 1;
    }else{
        break;
    }
}
if(low<=high){
    System.out.println("可以找到:index="+mid+"。");
}else{
    System.out.println("无法找到!");
}

二分法思想是取中比较:
1、求有序序列arr的中间位置mid。

2、k为要查找的数字。
 若arr[mid] = k,查找成功;
 若arr[mid] > k,在前半段中继续进行二分查找;
 若arr[mid] < k,则在后半段中继续进行二分查找。
 假如有一组数为3、12、24、36、55、68、75、88要查给定的值k=24。可设三个变量low、mid、high分别指向数据的上界,中界和下界,mid=(low+high)/2。
 A.开始令low=0(指向3),high=7(指向88),则mid=3(指向36)。因为 k < mid,故应在前半段中查找。
 B.令新的high=mid-1=2(指向24),而low=0(指向3)不变,则新的mid=1(指向12)。此时k>mid,故确定应在后半段中查找。
 C.令新的low=mid+1=2(指向24),而high=2(指向24)不变,则新的mid=2,此时k=arr[mid],查找成功。
如果要查找的数不是数列中的数,例如k=25,当第四次判断时,k>mid[2],在后半段查找,令low=mid+1,即low=3(指向36),high=2(指向24)出现low>high的情况,表示查找不成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值