首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请帮忙看看这段折半查找代码解决方法

2012-02-22 
请帮忙看看这段折半查找代码C/C++ codebool fd(vector int &vec,int num){bool rtr falsebs(vec)vec

请帮忙看看这段折半查找代码

C/C++ code
bool fd(vector <int> &vec,int num){    bool rtr = false;    bs(vec);    vector <int>::size_type i = 0, beg = 0, end = vec.size() - 1, mid = 0;    while (beg < vec.size() && beg >= 0 && end >= 0 && end < vec.size() && vec[beg] <= vec[end])    {        mid = (beg + end)/2;        if ( vec[mid] < num)            beg = mid + 1;        else if ( vec[mid] > num )            end = mid - 1;        else {            rtr = true;            break;        }    }    return rtr;}


这段代码运行起来没有问题,就是我的 while 判断条件比其他写的长得多。。。可是如果不判断,那么 num 如果特别大或者特别小就会出现 out of range 错误。怎么改的简洁点呢?

[解决办法]
beg >= 0 ?这句话貌似没必要吧因为beg始终没有减过不存在小于0的情况
[解决办法]
bool fd(vector <int> &vec,int num)
{
bs(vec);

vector <int>::size_type i = 0, beg = 0, end = vec.size() - 1, mid = 0;
while (beg<=end)
{
mid = (beg + end)/2;
if ( vec[mid] < num)
beg = mid + 1;
else if ( vec[mid] > num )
end = mid - 1;
else return true;
}

return false;
}

热点排行