二分查找

来源:互联网 发布:四川航空公司待遇知乎 编辑:程序博客网 时间:2024/04/29 07:25

当我们在一个数组中想查找一个数时我们通常会通过一个for循环一个一个的便利时间复杂度为(n)当数组非常大时就会出现超时,这时候用二分查找就会解决这个情况。因为二分查找的时间复杂度为(lgn)。举个例子:a[8]={1,2,3,4,5,6,7,8,9};我们目标是找到6,所以我们进行的操作为:首先找到最中间的位置即5,5<6,所以在数组{6,7,8,9}中再找;再找中间的为7,7>6.所以就在{6}中找在找最中间的为6=目标数字,即找到目标数字。

具体代码:

递归(1)

int binsearch(int a[],int low,int high,int target)
{
    if(low<=hight)
    {
        int mid=(low+hight)/2;
        if(a[mid]==target)
        {
            return mid;
        }
        else if(a[mid]>target)
        {
            return binsearch(a,low,mid-1,target);
        }
        else
        {
            return binsearth(a,mid+1,high,target);
        }
    }
    else
        return -1;
}

非递归(2)

int binsearth(int a[],int n,int target)
{
    int low=0;
    int high=n;
    while(low<=high)
    {
        int mid=(low+high)/2;
        if(a[mid]==target)
        {
            return mid;
        }
        else if(a[mid]>target)
        {
           high=mid-1;
        }
        else
        {
            low=mid+1;
        }
    }
    return -1;
}




0 0