Transposition en place d'une matrice

Est-il possible de transposer un (m,n) de la matrice en place, ce qui donne la matrice est représenté par un tableau de taille m*n ?

L'habitude algorithme

transpose(Matrix mat,int rows, int cols ){
    //construction step
    Matrix tmat;
    for(int i=0;i<rows;i++){
      for(int j=0;j<cols;j++){
       tmat[j][i] = mat[i][j];
      }
    }
 }

ne s'applique pas à un seul tableau, sauf si la matrice est une matrice carrée.
Si aucun, quel est le montant minimum de la mémoire supplémentaire nécessaire??

EDIT:
J'ai déjà essayé toutes les saveurs de

for(int i=0;i<n;++i) {
  for(int j=0;j<i;++j) {
     var swap = m[i][j];
     m[i][j] = m[j][i];
     m[j][i] = swap;
  }
}

Et il n'est pas correct. Dans cet exemple précis, m ne marche pas même exister. En une seule ligne
matrice mat[i][j] = mat[i*m + j], où trans[j][i] = trans[i*n + j]

source d'informationauteur UmNyobe