有一下一个二维数组
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
此数组从左向右 从上到下是一个递增的过程 我们在查找的过程中可以划分区域查找 若某数大于要查找的数 则下一个查找区域应该在它上方或者是左方 某数小于要查找的数 则下一个要查找的区域应该在他的下方或者是右方 那么我们可以看到这样一种过程
若要于此数组中查找7
根据以上过程我们可以得出一个思路:从右上方开始找 若当前数大于所找数 则删去当前数所在的列 若当前数小于所找数则删去当前数所在的行
代码
bool Find(int* martix,int rows,int colums,int number)
{
bool found = false;
while(martix!=null&rows>0&&colums>0)
{
int row = 0;
int colum = colums - 1;
while(row<rows&&colums>0)
{
if(martix[row*colums+colum]==number)
{
found = true;
break;
}else if(martix[row*colums+colum>number)
{
--colum;
}else
{
++row;
}
}
}
return found;
}