面试题4:二维数组中的查找
题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:从数组的右上角开始查找,如果右上角的数比要查找的数大,就排除这一列,否则,就在这一列往下找,依次类推。
#include<iostream>
using namespace std;
bool twoDArrayFind(int[][4], int, int, int);
int main()
{
int array[4][4] =
{
{1,2,8,9},
{2,4,9,12},
{4,7,10,13},
{6,8,11,15 }
};
int val = 5;
if (twoDArrayFind(array, 4, 4, val))
{
cout << val << endl;
}
else
{
cout << "无此元素" << endl;
}
}
bool twoDArrayFind(int array[][4], int rows, int cols, int val)
{
bool found = false;
int row = 0;
int col = cols - 1;
while (row < rows && col > 0)
{
if (array[row][col] == val)
{
found = true;
break;
}
else if (array[row][col] > val)
{
--col;
}
else
{
++row;
}
}
return found;
}