方法:正如名称一样,使用二分查找,idex为返回的下标,初始化为-1,如果数组中不存在target,则循环不会更新idex,直接返回。
每次查找范围为从left到right,且都为闭区间,因此每轮结束后,新范围不能包含此轮已经判断过的middle下标元素。
因此如果middle元素小于target,则说明target如果存在,肯定在从middle+1到right的范围中,故令left=middle+1;反之,如果middle元素大于target,则说明target如果存在,肯定在从left到middle-1的范围中,因此令right=middle-1。
int search(int* nums, int numsSize, int target){
int left=0;
int right = numsSize-1;
int middle;
int idex = -1;
while(left<=right){
middle = (left+right)/2;
if(nums[middle]==target){
idex = middle;
break;
}
else if(nums[middle]>target){
right = middle-1;
continue;
}
else{
left = middle+1;
continue;
}
}
return idex;
}