在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
分析
选取数组中右上角的数字。
若该数字等于要查找的数字,则查找结束;
若该数字大于要查找的数字,则剔除这个数字所在的列;
若该数字小于要查找的数字,则剔除这个数字所在的行。
若选取数组中左下角的数字,则剔除条件相反。
示例一
/*选取数组中右上角的数字*/
bool Find_1(int *arr, int rows, int columns, int number) {
bool isFound = false;
if (nullptr != arr && rows > 0 && columns > 0) {
int row = 0;
int column = columns - 1;
while (row < rows && column >= 0) {
if (number == arr[row * columns + column]) {
isFound = true;
break;
}
else if (arr[row * columns + column] > number) {
--column;
}
else
++row;
}
cout << "row=" << row + 1 << ",column=" << column + 1 << endl;
}
return isFound;
}
示例二
/*选取数组中左下角的数字*/
bool Find_2(int *arr, int rows, int columns, int number) {
bool isFound = false;
if (nullptr != arr && rows > 0 && columns > 0) {
int row = rows - 1;
int column = 0;
while (column < columns && row >= 0) {
if (number == arr[row * columns + column]) {
isFound = true;
break;
}
else if (arr[row * columns + column] > number)
--row;
else
++column;
}
cout << "row=" << row + 1 << ",column=" << column + 1 << endl;
}
return isFound;
}