首页 > 其他 > 详细

动态法

时间:2016-11-06 07:39:14      阅读:130      评论:0      收藏:0      [点我收藏+]

1)二分查找法

可以看出非组合的尾递归,可以用循环来取代。

template<typename T>
int centerFind(const vector<T>& source,const T& finder)
{
    int ret=-2;
    int startIndex=0;
    int endIndex=source.size()-1;
    int CenterIndex=startIndex+(endIndex-startIndex)/2;

    while(ret==-2)
    {
        if(CenterIndex==startIndex&&startIndex==endIndex)//1个数
        {
            if(source[CenterIndex]==finder)
            {
                ret=CenterIndex;
            }
            else
            {
                ret=-1;
            }
        }
        else
        {
            if(source[CenterIndex]==finder)
            {
                ret=CenterIndex;
            }
            else if(source[CenterIndex]>finder)
            {
                endIndex=CenterIndex-1;
                CenterIndex=startIndex+(endIndex-startIndex)/2;
                if(startIndex>endIndex)
                {
                    ret=-2;
                }
            }
            else
            {
                startIndex=CenterIndex+1;
                CenterIndex=startIndex+(endIndex-startIndex)/2;
                if(startIndex>endIndex)
                {
                    ret=-2;
                }
            }
        }
    }
}

 

动态法

原文:http://www.cnblogs.com/lsfv/p/6034643.html

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