有下面一个面试题:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
例如在数组a中:
int a[4][4]={
{1,2,8,9},
{2,4,9,12},
{4,7,10,13},
{6,8,11,15}
};
找到7的位置,并且打印出来。
分析:
(1)第4列第一个为9,9>7,所以第4列都不用管了。
即:
1 2 8
2 4 9
4 7 10
6 8 11
(2)同理,第三列也排除
1 2
2 4
4 7
6 8
(3)2<7,所以只用在2下面区域找7即可
2 4
4 7
6 8
(4)4<7,所以只用在2下面区域找7即可
4 7
6 8
实现代码:
#include <stdio.h>
void Find(int *a,int rows,int columns,int number)
{
if(a!=NULL && rows>0 && columns>0)
{
int row=0;
int column=columns-1;
while(row<rows && column>=0)
{
if(a[row*columns+column]==number)
{
printf("找到%d了,位置为%d,%d\n",number,row,column);
break;
}
else if(a[row*columns+column]>number)
--column;
else
++row;
}
}
}
int main()
{
int a[4][4]={
{1,2,8,9},
{2,4,9,12},
{4,7,10,13},
{6,8,11,15}
};
Find(a,4,4,7);
return 0;
}