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];
}