1.题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,
每一列都按照从上到下递增的顺序排列。请完成一个函数,
输入这样的一个二维数组和一个整数,
判断数组中是否该整数。
思想:首先选取数组中右上角的数字,如果该数字等于要查找的数字,则查找
过程结束;如果该数字大于要查找的数字,则要剔除这个数字所在的列
;如果该数字小于要查找的数字,则提出这个数字所在的行。总的来说
:如果所查找的书不在数组的右上角,则每次都在数组的查找范围剔除
一行或一列,这样每一步都可以缩小查找范围。直到找到要查找的数字
或者查找范围为空。
主要思想代码:
bool Find1(int* a, int rows, int lows, int number)
{
bool found = false;
if(a != nullptr && rows > 0 && lows > 0)
{
int row = 0;
int low = lows - 1;
while(row < rows && low >=0)
{
if(a[row * lows + low] == number)
{
found = true;
break;
}
else if(a[row * lows + low] > number)
-- low;
else
++ row;
}
}
return found;
}