运行查找4 返回-1
#include <stdio.h>
int query(int a[ ], int value){
int low , hight ,middle;
low=0;
hight=sizeof(a)/sizeof(int)-1;
while(low<=hight){
middle=(low+hight)/2;
if(a[middle]==value){
return middle;
}else if(a[middle]>value){
hight=middle-1;
}else{
low=middle+1;
}
}
return -1;
}
int main(){
int a[]={1,2,3,4,5,6,7,8,9};
printf("%d",query(a,4));
}
在 query()函数里, hight=sizeof(a)/sizeof(int)-1; 这里不能得到数组的长度值。在函数里,数组的长度需通过形参传递。修改如下,供参考:
#include <stdio.h>
int query(int a[ ], int value,int n){
int low , hight ,middle;
low = 0;
//hight=sizeof(a)/sizeof(int)-1;
hight = n;
while(low<=hight){
middle=(low+hight)/2;
if(a[middle]==value){
return middle;
}else if(a[middle]>value){
hight=middle-1;
}else{
low=middle+1;
}
}
return -1;
}
int main(){
int a[]={1,2,3,4,5,6,7,8,9};
int hight=sizeof(a)/sizeof(int)-1;
printf("%d",query(a,4,hight));
return 0;
}