2015-09-04 252 views
1

我有一個二維矩陣如何轉置二維矩陣存儲爲C一維數組

1 2 3 
4 5 6 
7 8 9 

保存在C這樣

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

,我想獲得像這樣的矩陣轉置

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

沒有將原始數組轉換爲2D模式。如何才能做到這一點?

回答

7

這可以通過切換通常用於索引索引的循環來完成。如果你想你可以查找原始矩陣通過它與像這樣

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

如果我們切換ij循環,我們可以得到所需的輸出如下面的示例程序

#include <stdio.h> 

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"); 
    } 
} 

這與2D矩陣的轉置的數學定義有關。二維矩陣上的轉置操作將行與列交換,在C程序中,當我們索引它時,我們交換了我們的行和列循環。

+0

非常優雅的解決方案,可以很容易地修改成爲一般轉置功能。 –

相關問題