题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和整数,判断数组中是否含有该整数。
解题思路:从左下角或右上角开始比较,如果要找的number<数组右上角中的数字,则最右一列都可排除无需再找。而后列--,在进行判断,如果number>此时数组中的数字,则此行均可排除,行++。直至找到该数字。
代码如下:
注意一点,二维数组在内存中占据连续的空间,在内存中从上到下存储各行元素,同一行中按照从左到右的顺序存储。因此可根据行号和列号计算出相对于数组首地址的偏移量,从而找到对应的元素。
warning:遍历行列的时候row从0开始,col=cols-1,也就是右上角的数字,比较之后依据大小进行col--或者row++的操作,最终注意row<rows以及col>0。
然后写一个主函数,调用上述方法函数。
主函数
定义一个4*4的二维数组,需要注意二维数组的传参方式,这里可以将(int *)data,理解为将二维数组data拉成了一维。