我们可以这样入手,比如给一个3*3的二维数组,从每一行的最大值开始比较:
1.如果X大于a[0][2],第一行中的数据肯定都比x小,所以继续跟下一行的a[1][2]比较
2.如果X小于a[0][2],第3列中的数据肯定都比x大,所以继续跟上一列的
a[0][1]比较
3.循环条件为行数>=0;列数<=n-1;
实现代码如下:
#define M 3
#define N 3
bool Find(int a[M][N],const int x,int n)
{
int col = n-1;
int row = 0;
if (x > a[n-1][n- 1] || x < a[0][0])
return false;
while (col<=n-1&&row>=0)
{
if (x < a[row][col])
col--;
else if (x>a[row][col])
row++;
else
return true;
}
return false;
}
int main()
{
int a[M][N] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
cout << Find(a, 1, 3) << endl;
cout << Find(a, 9, 3) << endl;
cout << Find(a, 4, 3) << endl;
cout << Find(a, 11, 3) << endl;
system("pause");
return 0;
}
结果如图: