题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
题目分析:矩阵是有序的,从左下角来看,向上数字递减,向右数字递增,因此从左下角开始查找,当要查找数字比左下角数字大时。右移要查找数字比左下角数字小时,上移。
例矩阵:
1 2 3
4 5 6
7 8 9
具体算法如下:
#include <iostream>
using namespace std;
int main()
{
int i, j;
int key = 0;
int const row = 3;
int const col = 3;
int arr[row][col] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
cout << "输入要查找的值" << endl;
cin >> key;
/* for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
cin >> arr[row][col];
}
}*/
for (i = row - 1, j = 0;(i >= 0 )&& (j < col);)
{
if (arr[i][j] == key)
{
cout << "该数存在!" << endl;
return 0;
}
if (arr[i][j]>key)
{
i--;
continue;
}
if (arr[i][j] < key)
{
j++;
}
}
cout << "该数不存在" << endl;
return 0;
}
结果: