//二分搜索
#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;
}
二分搜索
最新推荐文章于 2014-01-17 18:23:54 发布