二维数组中的查找
问题描述:在一个二位数数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
例:下面的二维数组满足该情况,如果在该数组中查找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; }以上都是从右上角开始找的,当然也可以从做左下角开始,这里我就不具体分析了,思路前面一样,只是换个方向。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。