问题描述:在一个二维数组中,每一行都按照从左到右的递增顺序排列,每一列都按照从下到上递增的顺序排列。请完成一个函数,输入这样的一个二位数组和一个整数,判断数组中是否含有该数。
实例:下面二位数组,每行每列是递增的,如果查找10,返回true;如果查找数字11,则返回false;
1 3 5 7
2 4 6 8
4 10 12 15
6 13 17 19
图示(查找10):
(1)10大于7,下次要在7的下边区域(红色框)查找
(2)10大于8,下次要在8的下标区域(红色框)查找
(3)10小于15,下次要在15的左边区域(红色框)查找
通过图示我们发现,如果要数组右上角数字大于查找数字,根据题目要求要在下一行进行查找(row++);如果该数字小于查找数字,则要在该行的逐列进行查找(col--);如果该数字恰好等于查找数字,表示查找成功。
代码实现:
//matrix表示数组,row表示行,col表示列,key表示要查找数字
bool _Find(int *matrix,int row,int col,int key)
{
assert(matrix);
assert(row > 0);
assert(col > 0);
int _row=0;
int _col=col-1;
while(_row < row && _col >=0)
{
//数组右上角数字大于查找数字
if(matrix[_row * col + _col] > key)
_col--;
//数组右上角数字小于查找数字
else if(matrix[_row * col + _col] < key)
_row++;
//右上角数字等于查找数字
else
return true;
}
return false;
}