内容:
在一个二维数组中,每一行都按照从左往右递增的顺序排列,每一列都按照从上到下递增的顺序排列。请完成一个函数,输入这样的一个二维数组,判断是否含有该整数。
解题思路:
首先选取数组中右上角的数字,如果该数字等于要查找的数字,则查找结束;如果该数字大于要查找的数字,则剔除这个数字所在的列;如果该数字小于要查找的数字,则剔除这个数字所在的行。也就是说,如果要查找的数字不在数组的右上角,则每次都在数组中剔除一行或者一列,这样缩小范围查找。
代码实现:
#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; }