按升序(降序)排列的数组,查找目标,返回下标
- mid的确定,mid=(right+left)/2,实际上是向下取整,mid更靠近left
- 什么时候结束循环,left>right时跳出循环
- 循环体做的事:每次与mid进行比对时若不匹配,left或者right两个指针的其中一个会移动,移动完后重新计算mid,若不匹配继续移动指针、计算、匹配直到left>right跳出循环,若匹配返回mid;
- 指针如何移动?mid<target说明目标落在右边,移动left=mid+1
mid>target说明目标落在右边,移动right=mid-1
int arr[n];
int bSearch(int n,int target){
int left,right,mid;
left=0;
right=n-1;
while(left<=right){
mid=(left+right)/2;
if(a[mid]<target){
left=mid+1;
}
else if(a[mid]>target){
right=mid-1;
}
else{
printf("查找成功,下标为");
return mid;}
}
return -1;
}