二分搜索

//二分搜索
#include <iostream>
#include <vector>
using namespace std;

//第一种算法
template <typename Comparable>
int binarySearch1( const vector<Comparable> & a,const Comparable & x )
{
    int low = 0, hight = static_cast<int>(a.size( ) -1);
    while ( low <=hight )
    {
        int mid = ( low + hight ) / 2;
        
        if ( a[mid] < x ) {
            low = mid + 1;
        }
        else if( a[mid] > x )
        {
            hight = mid - 1;
        }
        else if( a[mid] == x )
        {
            return mid;
        }
    }
    
    return -1;
}

//第二种算法
template <typename Comparable>
int binary_Search( const vector<Comparable> & a, const Comparable & x, int left, int right )
{
    int mid = ( left + right ) / 2;
    if ( a[mid] > x )
    {
        right = mid - 1;
        return binary_Search( a, x, left, right);
    }
    else if( a[mid] < x )
    {
        left = mid + 1;
       return binary_Search( a, x, left, right);
    }else
    {
        return mid;
    }
}

template <typename Comparable>
int binarySearch2( const vector<Comparable> & a, const Comparable & x )
{
    
    int left = 0, right =a.size( );
    return  binary_Search( a, x, left, right );
}



int main(int argc, const char * argv[])
{

    
    std::cout << "Hello, World!\n";
    
    vector<int> array;
    
    array.push_back(3);
    array.push_back(13);
    array.push_back(23);
    array.push_back(31);
    array.push_back(52);
    array.push_back(160);
    array.push_back(667);
    array.push_back(686);
    array.push_back(999);
    
    printf("%d\n", binarySearch2(array, 160));
    printf("%d\n", binarySearch1(array, 23));
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值