题目
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
问题分析
应当从具体问题入手,通过分析简单具体的例子,发现普遍的规律。
现在假定,我们要从二维数组
1 7 14 21
3 8 15 22
5 9 16 23
7 17 23 24
中检索是否存在数字7。
按照从右上方,列优先的顺序检索该数组。
1. 在检索17的时候,因为21大于17,故可剔除第四列。
2. 在检索14的时候,因为14小于17,故可剔除第一行,相当于更新行号和列号后重新执行而已。则剩下
3 8 15
5 9 16
7 17 23
3. 在检索15的时候,因为15小于17,故可剔除第一行,只剩下
5 9 16
7 17 23
4. 在检索16的时候,因为16小于17,故可剔除第一行,只剩下
7 17 23
5. 在检索到23的时候,因为23大于17,故可剔除第三列,只剩下
7 17
6. 检索到17,返回。
代码实现如下:
#include#define M 4#define N 4int FindNumber(int array[M][N],int rows,int columns,int number){ if(array!=NULL && rows>0 && columns>0) { int col=columns-1,row=0; while(col>=0 && row number) { col--; continue; } else if(array[row][col]
结果如下:
$ ./MyFindNumberInTwoArrays.exe
要测试的数组为:1 7 14 213 8 15 225 9 16 237 17 23 24请输入要查找的数:17该数存在请输入要查找的数:23该数存在请输入要查找的数:22该数存在请输入要查找的数:10该数不存在请输入要查找的数:6该数不存在请输入要查找的数: