矩阵转置

8 分钟

转置就是把行和列对调:原来第 行第 列的数 a[i][j],搬到结果的第 行第 列。一个 列的矩阵,转置后变成 列。

用一个新数组接住最稳妥:

int a[105][105], b[105][105], r, c;
for (int i = 0; i < r; i++)
    for (int j = 0; j < c; j++)
        b[j][i] = a[i][j];   // 行列互换

// 方阵想原地转置:只走上三角
int n;
for (int i = 0; i < n; i++)
    for (int j = i + 1; j < n; j++)
        swap(a[i][j], a[j][i]);

遍历每个元素一次,复杂度 。两个坑要记牢:其一,非方阵不能"原地"转置,因为形状都变了,必须开新数组 b[c][r];其二,方阵想省内存做原地转置时,内层循环要写 开始——如果 从 0 开始,每对元素会被交换两次,等于换回原样,白忙一场。对角线元素 自己不用换。

小纸条

3×2 的矩阵转置后是几行几列?

登录 后可看答案

矩阵转置 · 考级冲刺 · op599 课程