typedef struct {
int col;
int row;
int value;
}term;
void fast_transpose(term a[], term b[]) {
int rowcount[50]; //记录a每一列(b每一行)有多少个元素
int weizhi[50]; //记录a每一列应该插入b的哪一行。下标是a的列,值是该列在b的位置
int arow = a[0].row;
int acol = a[0].col;
int count = a[0].value;
b[0].col = a[0].row;
b[0].row = a[0].col;
b[0].value = a[0].value;
if (count > 0) {
for (int i = 0; i < acol; i++)
{
rowcount[i] = 0; //初始化为0
}
for (int i = 1; i < count; i++)
{
rowcount[a[i].col]++;//算a每一列(b每一行)有多少个元素
}
weizhi[0] = 1;
for (int i = 1; i < acol; i++)
{
weizhi[i] = weizhi[i - 1] + rowcount[i - 1];//算a每一列应该插入b的哪一行。下标是a的列,值是该列在b的位置
}
int j = 0;
for (int i = 1; i < count; i++)
{
j = weizhi[a[i].col];//取稀疏a的第i行所应该插入的位置
weizhi[a[i].col]++;//取完后位置加一
b[j].col = a[i].row;
b[j].row = a[i].col;
b[j].value = a[i].value;
}
}
}
稀疏矩阵的快速转置
最新推荐文章于 2023-11-24 19:23:07 发布