Comment transposer une masortingce 2D stockée dans un tableau C 1D

J’ai une masortingce 2D

1 2 3 4 5 6 7 8 9 

stocké dans C comme ça

 int array[9] = {1,2,3,4,5,6,7,8,9}; 

et je voudrais obtenir la transposée de cette masortingce comme celle-ci

 int array_t[9] = {1,4,7,2,5,8,3,6,9}; 

sans convertir le tableau d’origine en un 2D. Comment cela peut-il être fait?

    Cela peut être fait en alternant les boucles que vous utiliseriez normalement pour l’indexer. Si vous voulez la masortingce d’origine, vous pouvez la parcourir avec quelque chose comme ceci

     for (i = 0; i < 3; ++i) { for (j = 0; j < 3; ++j) { printf("%d ", array[j + i * 3]); } printf("\n"); } 

    Si nous commutons les boucles i et j , nous pouvons obtenir la sortie souhaitée comme dans l'exemple de programme suivant

     #include  int main() { int array[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int i, j; for (j = 0; j < 3; ++j) { for (i = 0; i < 3; ++i) { printf("%d ", array[j + i * 3]); } printf("\n"); } } 

    Ceci est lié à la définition mathématique de la transposition d'une masortingce 2D. L'opération de transposition sur une masortingce 2D permute les lignes avec les colonnes. Dans le programme C, lorsque nous l'indexons, nous échangeons nos boucles de lignes et de colonnes.