算法之折半查找

#ifndef _FIND_H_
#define _FIND_H_

//如果找到了就返回找到的数据的下标,找不到就返回b-1
template <typename T>
int find_half(const T* p, //待查找的数组
              int b, //起始位置
              int e, //终止位置
              T data, //要查找的数据
              bool increase = true) //数组排列方式,为真表示升序排列,为假表示降序排列
{
    int r = b - 1;
    if (increase)
    {
        while (b <= e)
        {
            int h = (b + e) / 2;
            if (data < p[h])
                e = h - 1;
            else if (p[h] < data)
                b = h + 1;
            else
                return h;
        }
    }
    else
    {
        while (b <= e)
        {
            int h = (b + e) / 2;
            if (data < p[h])
                b = h + 1;
            else if (p[h] < data)
                e = h - 1;
            else
                return h;
        }
    }
    return r;
}

 

posted @ 2018-03-06 21:06  Dean二十七  阅读(205)  评论(0编辑  收藏  举报