矩阵转置:此代码如何转置矩阵

时间:2016-06-21 06:22:05

标签: algorithm matrix

我试图理解下面的代码,它在行x col上转换矩阵

int transpose(int* a, int row, int col)
{
    for(int i = 0; i < row*col; i++)
    {
        int old = i;
        do
        {
            old = (old%row)*col + old/row;
        }
        while(old < i)
        swap(a[i],a[old])
    }
}

这一行(old = (old%row)*col + old/row)正在做什么?

1 个答案:

答案 0 :(得分:0)

矩阵存储在大小为row*col的一维数组中。数组索引为i=r*col+c,假设c是当前列,r是当前行。要计算索引中的行,请使用整数除法r=i/col来获取列索引,使用余数c=i%col

在引用行中,old是数组索引。该语句计算转置元素的新索引,因为除法和余数不是使用col计算的,如上所示,但使用row

do while循环可防止元素交换两次。但是我觉得很难理解,并且相信应该有更好的方法来做到这一点。