int search(int* nums, int numsLen, int target ) {
// write code here
if(numsLen==0)
return -1;
int left=0;
int right=numsLen-1;
int mid;
while(left<=right)
{
mid=(right+left)>>1;//右移一位即/2
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 ) {
// write code here
int left=0;
int right=numsLen-1;
int mid;
while(left
mid=(right+left)>>1;
printf("%d %d %dn",nums[left],nums[mid],nums[right]);
if(nums[mid]
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
mid=(right+left)>>1;
//printf("%d %d %dn",rotateArray[left],rotateArray[mid],rotateArray[right]);
if(rotateArray[mid]
right=mid;//该数可能为最小 则right=mid;
}
else if(rotateArray[mid]>rotateArray[right])//表示中点位于第一段单调递增数列
{
left=mid+1;//该数不可能为最小,则left=mid+1;
}
else
{
right=right-1;//有相同元素
}
}
return rotateArray[left];
// write code here
}