二分算法的感想及其实现
二分算法其实是一种思想,在某些情况下是有二进制成分在里面的,比如快速幂的实现。不过二分最常用来在一个有序序列中求特定值。当然这个序列必须是有序的,就是不递减或者不递增的序列,为什么要这样,了解一下二分的原理就知道了,在这里不再叙述,或者看一下接下来的代码就清楚了。
在这里主要叙述一下基本的代码框架,前提假设整个序列是递增的(其他情况类似):
假设递增序列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;
}