在一个二维数组中,每一行都按照从左往右递增的顺序排序,每一列都按照从上往下递增的顺序排序,请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
解题思路:该题查找一个二维数组的数时,通过查找的规律发现,当从该二维数组的最右上角查找开始,如果查找的数小于该数,那么这一列的数据都将大于要查找的数组,当查找的数大于该数时,那么这一行的数据将小于要查找的数据
红色表示剔除部分,绿色为所找的数字
具体实现代码:
#include<stdio.h>
bool Find(int (*arr)[4],int rows,int cols,int key)
{
int tag = false;
if(arr != NULL&&rows>0&&cols>0)
{
int row = 0;
int col = cols - 1;
while(row < rows &&col >=0)
{
if(key == arr[row][col])
{
tag = true;
break;
}
else if(key > arr[row][col])
{
++row;
}
else
{
--col;
}
}
}
return tag;
}