c实现 二分法查找 运行错误

运行查找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;
}