在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。


,左上角矩阵最大值4<7,右下角
int binsearch(int value, int *a, int n, int m1, int n1, int m2, int n2)
{
int begin_m1 = m1, begin_n1 = n1, end_m2 = m2, end_n2 = n2;
int left_result = 0, right_result = 0;
int i = (m1+m2)/2, j = (n1+n2)/2;
if (a == NULL)
return 0;
if (value < *(a+m1*n+n1) || value > *(a+m2*n+n2))
return 0;
else if (value == *(a+m1*n+n1) || value == *(a+m2*n+n2))
return 1;
while ((i!=m1 || j!=n1) && (i!=m2 || j!=n2)){
if ( value == *(a+i*n+j) )
return 1;
else if ( value < *(a+i*n+j) ){
m2 = i;
n2 = j;
i = (i+m1)/2;
j = (j+n1)/2;
}
else{
m1 = i;
n1 = j;
i = (i+m2)/2;
j = (j+n2)/2;
}
}
//search left & right
if ( i<end_m2 )
left_result = binsearch(value, a, n, i+1, begin_n1, end_m2, j);
if ( j<end_n2 )
right_result = binsearch(value, a, n, begin_m1, j+1, i, end_n2);
if (left_result | right_result )
return 1;
else
return 0;
}
287



被折叠的 条评论
为什么被折叠?



