二分查找

  1. 对分查找
    1. 源码
    2. 算法分析:

对分查找

源码

非递归方式:

int BinarySearch(const ElementType A[], ElementType X, int N)
{
    int low, mid, high, notfound;
    notfound = -1;
    low = 0;
    high = N - 1;
    while(low <= high){
        mid = (low + high) / 2;
        if(A[mid] > X){
            high = mid - 1;
        }else if(A[mid] < X){
            low = mid + 1;
        }else
            return mid;
    } 
    return notfound;
}

递归方式:

int BinarySearch(const ElementType A[], ElementType X, int low, int high)
{   
    mid = (low + high) / 2;

    if( A[mid] == X ){
        return mid;    
    }

    if( low >= high ){
        return -1;
    } else if( X < A[mid] ) {
        BinarySearch(A, X, low, mid-1);
    } else if( X > A[mid] ) {
        BinarySearch(A, X, mid+1, high)
    }
    return -1;
}

算法分析:

信息:

  1. A数组本身就已经排好序
  2. 一共有N个数,每次折半查找

Key Mind:

分析循环的次数,逆向思维从0开始以2的幂次方查找,总共有N个数。设循环T次,表达式为2^T =N-1,则T=log(N-1)。所以运行时间为O(logN)。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 876208453@qq.com

文章标题:二分查找

本文作者:Cai Jun

发布时间:2019-02-26, 11:05:58

最后更新:2019-02-25, 22:23:37

原始链接:http://johncaijun.github.io/2019-02-27-二分查找/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏