注意的问题:
1.二分法非递归:调整左右的边界
2.NotFound 不是关键字,要进行定义
3.数组传入函数可以未定义大小也可以定义大小
理由:函数而言,数组的长度是无关紧要的,因为 C 不会对形式参数执行边界检查
4.分清Right和Left(对应右左,分析理解对应Mid+\-1)
#include <stdio.h>
int BinarySearch(int a[],int x,int n)
{
int Mid,Right,Left;
Left = 0 ;
Right= n-1 ;
while(Right>=Left){
Mid = (Right+Left)/2;
if(a[Mid]<x){
Left= Mid+1;
}
else if(a[Mid]>x){
Right = Mid-1;
}
else if(a[Mid]==x)
{
return Mid;
}
}
return -1;
}
int main()
{
int a[]={1,2,3,4,5,6,7,8,9,10};
int n=10;
int x,y;
scanf("%d",&x);
y=BinarySearch(a,x,n) ;
if(y>=0){
printf("weizhi:%d",y);
}
else printf("NotFound");
return 0;
}