码迷,mamicode.com
首页 > 其他好文 > 详细

二分查找之再思考

时间:2015-09-20 22:21:04      阅读:185      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!