Qualcomm Interview Question Software Engineer / Developers
0of 0 votesWrite a function to transpose a NxN matrix. Do it in-place. e.g. m={{1,2,3},{4,5,6},{7,8,9}} ==> m={1,4,7},{2,5,8}{3,6,9}}. Function prototype is like this "transpose(dimension, pointer to 2-d array)".
void transposeMatrix(int **myArray, int N){
for(int i=0,j=0; i < N; i++){
for(j = i + 1;j<N;j++){
myArray[i][j] = myArray[i][j] ^ myArray[j][i];
myArray[j][i] = myArray[i][j] ^ myArray[j][i];
myArray[i][j] = myArray[i][j] ^ myArray[j][i];
}
}
}
#include <stdio.h>
int main(int argc, char *argv[])
{
int a[4][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13, 14, 15, 16}};
int i, j, temp;
int dim = 4;
for (i=0; i<dim-1; i++)
{
for (j=i; j<dim; j++)
{
temp = a[i][j];
a[i][j] = a[j][i];
a[j][i] = temp;
}
}
for (i=0; i<dim; i++)
{
for (j=0; j<dim; j++)
{
printf("%d", a[i][j]);
}
printf("\n");
}
return 0;
}

http://en.wikipedia.org/wiki/In-place_matrix_transposition
- kichi on September 20, 2009 Edit | Flag Reply#define DIM_MATRIX 10
int m[DIM_MATRIX][DIM_MATRIX];
// void Transpose(int dim, int m[][]) // error C2087: 'm' : missing subscript
// void Transpose(int dim, int (*m)[]) // error C2036: 'int (*)[]' : unknown size
void Transpose(int dim, int *m)
{
for (int row = 1; row<dim; row++)
{
for (int col=0; col<row; col++)
{
int t = m[col*dim+row];
m[col*dim+row] = m[row*dim+col];
m[row*dim+col] = t;
}
}
}