int search ( int * nums, int numsLen, int target ) {
if ( numsLen== 0 )
return - 1 ;
int left= 0 ;
int right= numsLen- 1 ;
int mid;
while ( left<= right)
{
mid= ( right+ left) >> 1 ;
if ( nums[ mid] == target)
return mid;
else if ( nums[ mid] > target)
{
right= mid- 1 ;
}
else
{
left= mid+ 1 ;
}
}
return left;
}
二分查找可用于任何局部有序的数组
int findPeakElement ( int * nums, int numsLen ) {
int left= 0 ;
int right= numsLen- 1 ;
int mid;
while ( left< right)
{
mid= ( right+ left) >> 1 ;
printf ( "%d %d %d\n" , nums[ left] , nums[ mid] , nums[ right] ) ;
if ( nums[ mid] < nums[ mid+ 1 ] )
left= mid+ 1 ;
else
right= mid;
}
return left;
}
int minNumberInRotateArray ( int * rotateArray, int rotateArrayLen ) {
if ( rotateArrayLen== 1 )
return rotateArray[ rotateArrayLen- 1 ] ;
int mid= 0 ;
int left= 0 ;
int right= rotateArrayLen- 1 ;
while ( left< right)
{
mid= ( right+ left) >> 1 ;
if ( rotateArray[ mid] < rotateArray[ right] )
{
right= mid;
}
else if ( rotateArray[ mid] > rotateArray[ right] )
{
left= mid+ 1 ;
}
else
{
right= right- 1 ;
}
}
return rotateArray[ left] ;
}