二分查找实现代码

二分查找复杂度:O(logn)

递归实现:

template <typename T>
int BinarySearch(const T array[], int start, int end, const T& value)
{
    if (start>end)
        return -1;
    int middle = (start + end) / 2;
    if (array[middle] == value)
        return middle;
    else if (array[middle] < value)
        return BinarySearch(array, middle+1, end, value);
    else
    	return BinarySearch(array, start, middle-1, value);
};

非递归实现(迭代):

template <typename T>
int BinarySearch(const T array[], int start, int end, const T& value)
{
    int result = -1;
    while (start <= end)
    {
        int middle = (start + end) / 2;
        if (array[middle] == value)
        {
            result = middle;
            break;
        }
        if (array[middle] < value)
            start = middle + 1;
        else
            end = middle - 1;
    }
    return result;
}

比较时也可使用int tmp=strcmp(array[middle],value),通过判断tmp的值作为条件

二分查找相关实现:
1.lower_bound和upper_bound
2.计算根号2的近似值

参考文章 点击跳转
该文章中还有一些有关二分查找的应用可供阅读

猜你喜欢

转载自blog.csdn.net/weixin_43835911/article/details/88912813