Given an n x n matrix, where every row and column is sorted in increasing order. Given a number x, how to decide whether this x is in the matrix. The designed algorithm should have linear time complexity.

Thanks to devendraiiit for suggesting below approach.

1) Start with top right element

2) Loop: compare this element e with x

….i) if they are equal then return its position

…ii) e < x then move it to down (if out of bound of matrix then break return false)
..iii) e > x then move it to left (if out of bound of matrix then break return false)

3) repeat the i), ii) and iii) till you find element or returned false

**Implementation:**

#include<stdio.h> /* Searches the element x in mat[][]. If the element is found, then prints its position and returns true, otherwise prints "not found" and returns false */ int search(int mat[4][4], int n, int x) { int i = 0, j = n-1; //set indexes for top right element while ( i < n && j >= 0 ) { if ( mat[i][j] == x ) { printf("\n Found at %d, %d", i, j); return 1; } if ( mat[i][j] > x ) j--; else // if mat[i][j] < x i++; } printf("\n Element not found"); return 0; // if ( i==n || j== -1 ) } // driver program to test above function int main() { int mat[4][4] = { {10, 20, 30, 40}, {15, 25, 35, 45}, {27, 29, 37, 48}, {32, 33, 39, 50}, }; search(mat, 4, 29); getchar(); return 0; }

Time Complexity: O(n)

The above approach will also work for m x n matrix (not only for n x n). Complexity would be O(m + n).

Please write comments if you find the above codes/algorithms incorrect, or find other ways to solve the same problem.