内容:
在一个二维数组中,每一行都按照从左往右递增的顺序排列,每一列都按照从上到下递增的顺序排列。请完成一个函数,输入这样的一个二维数组,判断是否含有该整数。
解题思路:
首先选取数组中右上角的数字,如果该数字等于要查找的数字,则查找结束;如果该数字大于要查找的数字,则剔除这个数字所在的列;如果该数字小于要查找的数字,则剔除这个数字所在的行。也就是说,如果要查找的数字不在数组的右上角,则每次都在数组中剔除一行或者一列,这样缩小范围查找。
代码实现:
#include<stdio.h>
#include<Windows.h>
#define ROW 4
#define COL 4
#include<assert.h>
int is_find(int a[][COL],int key)
{
assert(a);
int row = 0;
int col = COL - 1;
while ((row <= ROW) && (col >= 0))
{
if (a[row][col] > key)
col--;
else if (a[row][col] < key)
row++;
else
return 1;
}
return 0;
}
int main(){
int a[ROW][COL] = {
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 },
{13,14,15,16},
};
int key = 7;
int ret = is_find(a, key);
printf("%d\n", ret);
system("pause");
return 0;
}