Courses βeta
Data Structures

Search in a row wise and column wise sorted matrix

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.

• 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)
• repeat the i), ii) and iii) till you find element or returned false

Implementation:

/* Searches the element x in mat[][]. If the element is found,
then prints its position and returns true, otherwise prints
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("\nFound at %d, %d", i, j);
return 1;
}
if ( mat[i][j] > x )
j--;
else //  if mat[i][j] < x
i++;
}

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;
}


Output:

Found at 2, 1

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).