在每行每列都是增序的矩阵中查找某个元素
题目:
给定一个矩阵int matrixA[m][n],每行每列都是增序的,实现一个算法寻找矩阵中的某个元素element。(创新工场)
思路:杨氏矩阵查找
矩阵为MatrixA[m][n],要找的数字为element,从第一行的最后一列的数MatrixA[0][n - 1]开始查找,element比MatrixA[0][n - 1]小则向左查找,否则向下查找,直到找到该数时退出。图示如下:(可能就会有多个element,只需找到其中一个返回是否存在即可)

实现代码:
/* 杨氏矩阵:查找 */ #include <stdio.h> #include <stdlib.h> #define M 4 #define N 4 int FindElement(int MatrixA[M][N], int element) { int i = 0, j = N - 1; while(1) { while(MatrixA[i][j] >= element) { if(MatrixA[i][j] == element) return 1; j--; if(j < 0) return 0; } while(MatrixA[i][j] <= element) { if(MatrixA[i][j] == element) return 1; i++; if(i >= M) return 0; } } } int main(void) { int MatrixA[M][N] = {{1, 3, 4, 8}, {3, 5, 6, 9}, {6, 7, 10, 11}, {7, 8, 12,15}, }; int i = 0; for(i = 1; i <= 15; i++) { printf("element: %-3d", i); switch(FindElement(MatrixA, i)) { case 0: printf("don't exist!\n"); break; case 1: printf(" exist!\n"); break; default: break; } } return 0; }
-----------------------我和我追猪的梦-----------------------------------------------------------------
作者:mickole

浙公网安备 33010602011771号