Skip to content
Related Articles
Get the best out of our app
GeeksforGeeks App
Open App
geeksforgeeks
Browser
Continue

Related Articles

C++ Program To Find Transpose of a Matrix

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article

Transpose of a matrix is obtained by changing rows to columns and columns to rows. In other words, transpose of A[][] is obtained by changing A[i][j] to A[j][i].

matrix-transpose

For Square Matrix :

The below program finds transpose of A[][] and stores the result in B[][], we can change N for different dimension.  

C++




// C++ Program to find the transpose
// of a matrix
#include <bits/stdc++.h>
using namespace std;
#define N 4
 
// This function stores transpose
// of A[][] in B[][]
void transpose(int A[][N],
               int B[][N])
{
    int i, j;
    for (i = 0; i < N; i++)
        for (j = 0; j < N; j++)
            B[i][j] = A[j][i];
}
 
// Driver code
int main()
{
    int A[N][N] = {{1, 1, 1, 1},
                   {2, 2, 2, 2},
                   {3, 3, 3, 3},
                   {4, 4, 4, 4}};
 
    int B[N][N], i, j;
 
    transpose(A, B);
 
    cout << "Result matrix is ";
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
           cout << " " << B[i][j];
        cout <<"";
    }
    return 0;
}

Output: 

Result matrix is
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4

Time Complexity: O(N*N) as two nested loops are running.

Space Complexity: O(N*N) as 2d array is created to store transpose.

For Rectangular Matrix :

The below program finds transpose of A[][] and stores the result in B[][]. 

C++




// C++ program to find transpose
// of a matrix
#include <bits/stdc++.h>
using namespace std;
#define M 3
#define N 4
 
// This function stores transpose
// of A[][] in B[][]
void transpose(int A[][N], int B[][M])
{
    int i, j;
    for(i = 0; i < N; i++)
        for(j = 0; j < M; j++)
            B[i][j] = A[j][i];
}
 
// Driver code
int main()
{
    int A[M][N] = {{1, 1, 1, 1},
                   {2, 2, 2, 2},
                   {3, 3, 3, 3}};
 
    // Note dimensions of B[][]
    int B[N][M], i, j;
 
    transpose(A, B);
 
    cout << "Result matrix is ";
    for(i = 0; i < N; i++)
    {
        for(j = 0; j < M; j++)
            cout << " " << B[i][j];
             
        cout << "";
    }
    return 0;
}

Output: 

Result matrix is
1 2 3 
1 2 3 
1 2 3 
1 2 3

Time Complexity: O(N*M) as two nested loops are running.

Space Complexity: O(N*M) as 2d array is created to store transpose.

In-Place for Square Matrix: 

C++




// C++ program to implement
// the above approach
#include <bits/stdc++.h>
using namespace std;
 
#define N 4
 
// Converts A[][] to its transpose
void transpose(int A[][N])
{
    for (int i = 0; i < N; i++)
        for (int j = i+1; j < N; j++)
            swap(A[i][j], A[j][i]);
}
 
// Driver code
int main()
{
    int A[N][N] = {{1, 1, 1, 1},
                   {2, 2, 2, 2},
                   {3, 3, 3, 3},
                   {4, 4, 4, 4}};
 
    transpose(A);
 
    printf("Modified matrix is ");
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
           printf("%d ", A[i][j]);
        printf("");
    }
 
    return 0;
}

Output: 

Modified matrix is
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4

Time complexity: O(n)

  • Transpose has a time complexity of O(n + m), where n is the number of columns and m is the number of non-zero elements in the matrix. 
  • The computational time for transpose of a matrix using identity matrix as reference matrix is O(m*n). 
  • Suppose, if the given matrix is a square matrix, the running time will be O(n2).

Auxiliary space: O(1).


My Personal Notes arrow_drop_up
Last Updated : 20 Feb, 2023
Like Article
Save Article
Similar Reads
Related Tutorials