二分查找算法

二分查找算法两种形式:

1、将区间[l,r]分成两块[l,mid][mid+1,r](或[l,mid-1][mid,r])。

当l=r时即为找到目标,跳出循环

while(l<r)

判定时分三种情况:

设目标为k

(1)k=a[mid]   r=mid

(2)k>a[mid]   l=mid+1

(3)k<a[mid]   r=mid

当l=r时,查找完毕跳出循环,

int Binary_Search(int l,int r,int k)
{
    int mid;
    while(l<r)
    {
        mid=(l+r)/2;
        if(k<=a[mid])
            r=mid;
        else
            l=mid+1;
    }
    return l;
}

(若目标k可能不在数列中,则要再次判定)

int Binary_Search(int l,int r,int k)
{
    int mid;
    while(l<r)
    {
        mid=(l+r)/2;
        if(k<=a[mid])
            r=mid;
        else
            l=mid+1;
    }
    if(k==a[l])
    return l;
    else
        return -1;
}

2、将区间分成三块,[l,mid-1]  mid  [mid+1,r]

判断时三种情况:

(1)k=a[mid]   查找完毕,返回mid值

若k!=mid,则mid必然不可能是目标结果的下标

(2)k>a[mid]   l=mid+1

(3)k<a[mid]   r=mid+1

两种情况完成查找,跳出循环

(1)l>r   未查找到结果

(2)k=a[mid]   查找到结果

int Binary_Search(int l,int r,int k)
{
    int mid;
    while(l<=r)//=
    {
        mid=(l+r)/2;
        if(k==a[mid])
            return mid;
        else if(k>a[mid])
            l=mid+1;
        else
            r=mid-1;
    }
    return -1;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值