記得Knuth教授說過 BinarySearch的概念在1946年被引入 而直到1962年才有一個無錯的版本出現....
我自己寫了一個BinarySearch 希望大家來找茬
/*****************************************************************************
* Function : BinarySearch *
* This Function return the nearest to 0 node find or -1 for no fine. *
* T *a : The string to search *
* int start : The start of the string *
* int end : The end of string *
* T f : The node wanna to find *
*****************************************************************************/
template< typename T >
int BinarySearch ( T *a, int start, int end, const T& f )
{
if( start > end )
return -1;
if( start == end - 1 )
{
if( a[start] == f )
return start;
return -1;
}
int mid = ( start + end ) / 2;
if( a[mid] > f )
{
return BinarySearch( a, start, mid, f );
}
else if( a[mid] < f )
{
return BinarySearch( a, mid, end, f );
}
else
{
while( mid > 0 )
{
if( a[mid--] != f )
return mid + 2;
}
}
return -1;
}
/* ----- end of function BinarySearch ----- */
我自己寫了一個BinarySearch 希望大家來找茬
/*****************************************************************************
* Function : BinarySearch *
* This Function return the nearest to 0 node find or -1 for no fine. *
* T *a : The string to search *
* int start : The start of the string *
* int end : The end of string *
* T f : The node wanna to find *
*****************************************************************************/
template< typename T >
int BinarySearch ( T *a, int start, int end, const T& f )
{
if( start > end )
return -1;
if( start == end - 1 )
{
if( a[start] == f )
return start;
return -1;
}
int mid = ( start + end ) / 2;
if( a[mid] > f )
{
return BinarySearch( a, start, mid, f );
}
else if( a[mid] < f )
{
return BinarySearch( a, mid, end, f );
}
else
{
while( mid > 0 )
{
if( a[mid--] != f )
return mid + 2;
}
}
return -1;
}
/* ----- end of function BinarySearch ----- */