在每行每列都是增序的矩阵中查找某个元素

题目:

给定一个矩阵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;
}
posted @ 2014-03-04 15:02  mickole  阅读(315)  评论(0)    收藏  举报