二分查找算法

二分查找算法两种形式:

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

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

while(l

判定时分三种情况:

设目标为k

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

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

(3)k

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

int Binary_Search(int l,int r,int k)
{
    int mid;
    while(l

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

int Binary_Search(int l,int r,int k)
{
    int mid;
    while(l

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

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

(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;
}

 

你可能感兴趣的:(面试题,c++,分治算法)