一、基本的二分搜索 寻找一个数
//基本的二分搜索 寻找一个数
int binarySearch(int nums[],int target){
int left=0;
int right=length-1; //注意1 两端都是闭区间
while(left<=right){ //注意2 <=
int mid=(right-left)/2+left;//等同于(left+right)/2,防止溢出
printf("first:[%d,%d,%d]\n",left,mid,right);
if (nums[mid]==target) return mid;//找到了目标值时终止
else if(nums[mid]<target) left=mid+1;//注意
else if(nums[mid]>target) right=mid-1;//注意
printf(" end:[%d, ,%d]\n\n",left,right);
}
return -1;//注意
}
问题思考:
1.为什么 while 循环的条件中是 <=,而不是 < ?
答:因为初始化 right 的赋值是 len-1,即最后一个元素的索引,而不是 length。这二者可能出现在不同功能的二分查找中,区别是:前者相当于两端都闭区间 [left, right],后者相当于左闭右开区间 [left, right),因为索引大小为 length 是越界的。
while(left <= right) 的终止条件是 left ==