二分算法

二分算法的感想及其实现

     二分算法其实是一种思想,在某些情况下是有二进制成分在里面的,比如快速幂的实现。不过二分最常用来在一个有序序列中求特定值。当然这个序列必须是有序的,就是不递减或者不递增的序列,为什么要这样,了解一下二分的原理就知道了,在这里不再叙述,或者看一下接下来的代码就清楚了。

   在这里主要叙述一下基本的代码框架,前提假设整个序列是递增的(其他情况类似):

   假设递增序列a[n],我们的任务就是找出元素k的在数组中的下标值(默认序列中含有目标值k)。那我们声明一个变量int l=0,r=n-1;l表示寻找过程中的左下标,r表示寻找过程中的右下标,再声明一个变量 int mid=(l+r)/2;这里体现着二分的思想,如果a[mid]<k;那么r=k-1;否则l=k+1;如果找到直接返回下坐标。

   下面是简单的示例代码:

    

int erfen(k)
{
    int l=0,r=n-1;
    int mid;

    while(l<r)
    {
        mid=(l+r)/2;

        if(a[mid]==k)
            return mid;
        else if(a[mid]>k)
            r=mid-1;
        else
            l=mid+1;
    }

    if(a[l]==k)
        return l;
    else
        return -1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值