一、题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
二、代码:
#include<iostream>
using namespace std;
#include<cassert>
bool Find(int* arr,int row,int col,int n)
{
int row1=0;
int col1=0;
assert(arr);
col1=col-1;
if(arr[row*col-1]<n||arr[0]>n)//如果这个数没在数组表示的值得范围
{
return false;
}
else//在数组值得范围内,进行查找
{
while (row1<row&&col1>=0)
{
if (arr[row1*col+col1]<n)
{
row1+=1;
}
else
{
col1-=1;
}
if (arr[row1*col+col1]==n)
{
return true;
}
}
return false;
}
}
测试:
void Test()
{
int* p=NULL;
int arr[4][4]={ {1,2,8,9},
{2,4,9,12},
{4,7,10,13},
{6,8,11,15}};
//二维数组中包含查找数字
cout<<Find((int*)arr,4,4,7)<<endl;//最大值最小值之间
cout<<Find((int*)arr,4,4,1)<<endl;//最小值
cout<<Find((int*)arr,4,4,15)<<endl;//最小值
//二维数组中不包含查找的数字
cout<<Find((int*)arr,4,4,0)<<endl;//小于最小值
cout<<Find((int*)arr,4,4,16)<<endl;//大于最大值
cout<<Find((int*)arr,4,4,3)<<endl;//在最大值和最小值之间没有这个数字
//cout<<Find(p,4,4,1)<<endl;//传入空指针
}
int main()
{
Test();
return 0;
}
三、运行结果: