二分查找 两种版本

//基础版本
int binarySearch(const vector<int> data, int num)
{
    int begin = 0;
    int end = sizeof(data) - 1;
    while(begin <= end){
        int mid = (end - begin)/2 + begin;
        if(num == data[mid])    return mid;
        else if(num > data[mid])    begin = mid +1;
        else end = mid - 1;    
    }
    return -1;
}

//加强版(有序序列中最先出现的num)//有重复数
int binarySearch(const vector<int> data, int num)
{
    int begin = 0;
    int end = sizeof(data) - 1;
    while(begin <= end){
        int mid = (end - begin)/2 + begin;
        if(data[mid] <= num)    begin = mid + 1;
        else    end = mid -1;
    }
    if(data[begin] == num && begin <= sizeof(data) - 1)
        return begin;
    else return -1;
}

猜你喜欢

转载自blog.csdn.net/ladykiller21/article/details/80414691