所以我有一个带有N个值的一维数组,其中N是一个完美的正方形.我将这个一维数组可视化为二维数组(尽管它不是).例如,具有值的数组int Array = { 0,1,2,3,4,5,6,7,8 }
那是
int *Array = new int [9];
for ( int i = 0 ; i < 9 ; i ++ )
Array[i] = i; // For example
Run Code Online (Sandbox Code Playgroud)
打印为
0 1 2
3 4 5
6 7 8
Run Code Online (Sandbox Code Playgroud)
所以,我想在一维数组中交换位置,以便我得到它的转置,...
例如...
0 3 6
1 4 7
2 5 8
Run Code Online (Sandbox Code Playgroud)
这基本上是相同的一维数组,但交换的值使得数组现在是int Array = {0,3,6,1,4,7,2,5,8}
如果我将它缩放到1024*1024维度的数组,逻辑将如何?
wxf*_*les 19
有了n = sqrt(N),您可以尝试一些简单的事情:
for(int i = 0; i < n; ++i)
for(int j = i+1; j < n; ++j)
std::swap(Array[n*i + j], Array[n*j + i]);
Run Code Online (Sandbox Code Playgroud)
转置操作执行swap(v[y][x],v[x][y])除了矩阵的对角线之外的上三角或下三角(让我们说上面).
在C一维向量中vc,v[y][x]对应于vc[y*n+x].所以你想做vc[y*n+x] = vc[x*n+y]
您想要交换的元素就是那些元素x > y.
你最终做了:
for(int y = 0; y < n; ++y)
for(int x = y+1; x < n; ++x)
swap(vc[x*n + y], vc[y*n + x]);
Run Code Online (Sandbox Code Playgroud)
你可以自己想出来......
| 归档时间: |
|
| 查看次数: |
6272 次 |
| 最近记录: |