问题描述:在一个二位数数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
例:下面的二维数组满足该情况,如果在该数组中查找5,则返回true,若查找15,则返回false
1 2 3 4 5
2 5 6 7 8
9 10 11 12 13
10 11 12 13 14
那怎么查找效率才高呢?
我们可以从第一行开始从每一行的最后一个开始起比较,如果要查找的数比该行的最后一个数小,则从后向前依次进行刚才动作,如果大,从下一行的左后一个起重复刚才的动作
直到找到最后一行的第一个数,如果还没找到,那就是不存在。
例如:从刚才的数组中找10
代码:
bool Find(char **str, int rows, int cols, int number)
{
assert(str);
if (rows > 0 && cols > 0)
{
int currow = 0;
int curcol = cols - 1;
while (currow < rows && curcol >= 0)
{
if (str[currow][curcol] < number)
{
currow++;
}
else if (str[currow][curcol] > number)
{
currow--;
}
else
{
return true;
}
}
}
return false;
}
以上都是从右上角开始找的,当然也可以从做左下角开始,这里我就不具体分析了,思路前面一样,只是换个方向。