求解C语言二分法查表

来源:百度知道 编辑:UC知道 时间:2024/06/07 05:20:47
我想用二分法查表,在把数组分成两部分后不断往下二分,但是我写的函数好像有问题,在临界点会查不到,请帮我看看,谢谢。
INT8U find_position(float a, float *p,INT8U num)
{
INT8U i,j,k1,k2,m;

m = j = num/2;
k1 = 0;
k2 = num;
for (i=0;i<m;i++)
{
if ( a>*(p+j) && a<*(p+j+1))
break; //找到了
else if ( a<*(p+j) )
{
k2 = j;
j = (k1+k2)/2;
}
else if ( a>*(p+j+1) )
{
k1 = j;
j = (k1+k2)/2 ;
}
else if ( a == *(p+j) )
break;
}
if ( j>=0 && j<(num-1) )
return (j+1);
else
{
if (j >= (num-1) )
return (0xf1); //超出最大值
else
return (0xf0); //超出最小值

}
}
To 03013110: 我的数组是浮点型的,我把你的array浮点型指针,但是我的编译器会提示illegal pointer conversion.
To tanyuguo: k1=j+1,上限能找到了,但是下限还是有点问题。
多谢两位指教。

k1=j;改成k1=j+1;试试

给你写个递归吧:

int *binarySearch(int val,int array[],int n){
int m=n/2;
if(n<=0)return NULL;
if(val==array[m])return array+m;
if(val<array[m])return binarySearch(val,array,m);
else return binarySearch(val,array+m+1,n-m-1);
}