按升序(降序)排列的数组,查找目标,返回下标
- 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
#include <stdio.h>
#include <stdlib.h>
int main(){
int a[]={1,2,3,4,5,6,7,8,9,10};
int target;
printf("输入查找的数:");
scanf("%d",&target);
int left=0,right=9,mid;
mid=(left+right)/2;
while(left<=right){
if(a[mid]<target){
left=mid+1;
}
else if(a[mid]>target){
right=mid-1;
}
else{
printf("查找成功,下标为");
return mid;}
}
printf("查找失败!");
return -1;
}