一个从左到右,从上到下依次递增的数值的二维数组,设计一个算法找出值A。
思路:以二维数组的右上角的为突破点(设值为B),如果A大于B,则可以消掉最上面那行,反之,可以消掉最右边那列。循环可找到那个值(当然如果二维数组中有那个值的话)。
程序如下:
#include<iostream>
using namespace std;
bool Find(int* matrix,int rows,int cols,int num)
{
bool found=false;
if(matrix!=nullptr&&rows>0&&cols>0)
{
int row=0,col=cols-1;
while (row<rows&&col>=0)
{
if (matrix[row*cols+col]==num)
{
found=true;
break;
}
else if (matrix[row*cols+col]>num) col--;
else row++;
}
}
return found;
}
int main()
{
int a[][4]={1,2,3,4,
5,6,7,8,
9,10,11,12,
13,14,15,16};
printf("begin!\n");
bool found=Find((int*)a,4,4,1);
//鲁棒性测试:输入空指针
//bool found=Find(NULL,3,3,2);
if (found) printf("pass\n");
else printf("failed\n");
cin.get();
}