首页 > 其他 > 详细

二分查找之再思考

时间:2015-09-20 22:19:12      阅读:265      评论:0      收藏:0      [点我收藏+]

一、一般的二分查找

一般的二分查找即,输出要查找元素在数组中的位置,这里的位置没有特殊限定,没有要求是数字第一次出现的位置,也没有要求是最后一次出现的位置。

int getPos(vector<int> A, int n, int val)
{
    if (A.size()==0)
    {
        return NULL;
    }
    int low=0;
    int high=n-1;
    while(low<=high)    //注意这里是小于等于
    {
        if (A[(low+high)/2]>val)
        {
            high=(low+high)/2-1;
        }
        else if (A[(low+high)/2]<val)
        {
            low=(low+high)/2+1;
        }
        else
            return (low+high)/2;
    }
    return -1;
}

技术分享

二、二分查找之返回数字第一次出现的位置

由于需要的是第一次的出现的位置,所以代码上要做一点小的改动,如果依然按照一种的代码执行那么结果如下:

技术分享

下面我们将代码稍微修改为:

int getPos(vector<int> A, int n, int val)
{
    if (A.size()==0)
    {
        return NULL;
    }
    int low=0;
    int high=n-1;
    while(low<=high)    //注意这里是小于等于
    {
        if (A[(low+high)/2]>val)
        {
            high=(low+high)/2-1;
        }
        else if (A[(low+high)/2]<val)
        {
            low=(low+high)/2;    //只是改动了这里
        }
        else
            return (low+high)/2;
    }
    return -1;
}

技术分享

技术分享

 

二分查找之再思考

原文:http://www.cnblogs.com/audi-car/p/4824367.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!