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

1. For Square Matrix
The below program finds the transpose of A[][] and stores the result in B[][], we can change N for a different dimension.
#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 \n";
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
cout << " " << B[i][j];
cout <<"\n";
}
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.
2. For Rectangular Matrix
The below program finds the transpose of A[][] and stores the result in B[][].
#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 \n";
for(i = 0; i < N; i++)
{
for(j = 0; j < M; j++)
cout << " " << B[i][j];
cout << "\n";
}
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.
3. In-Place for Square Matrix
Below is the implementation of the method:
#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);
cout << "Modified matrix is \n";
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
cout << A[i][j] << " ";
cout << "\n";
}
return 0;
}
Try It Yourself
Output
Modified matrix is 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
- Time Complexity: O(N²), as we traverse the upper triangle of the matrix using nested loops.
- Auxiliary Space: O(1), as the transpose is done in-place without using extra space.