★稀疏矩阵的快速转置算法:
template<class T>
SpreMatrix<T>::FastTranspos( )
{
int *rowSize=new int[Cols];//建立辅助数组,记录原数组每列(即新数组每行)的元素个数
int *rowStart=new int[Cols];// 建立辅助数组,记录新数组非零元素在三元组表中的位置
SpreMatrix<T> b(Cols,Rows);
b.Rows= Cols; b. Cols = Rows; b.Terms= Terms;
if(Terms>0)
{
for(int i=0;i<Cols; i++) rowSize[i]=0;
for(int i=0;i<Terms; i++) rowSize[smArray[i].col]++;// smArray[i]为原数组三元组表数组
rowStart[0]=0;//求出非零元素(每行第一个)在新数组三元组表中的位置
for(int i=1; i <Cols; i++)
rowStart[i]= rowStart[i-1]+ rowSize[i-1];
for(int i=0;i<Terms; i++)//填写三元组表
{
int j=rowStart[smArray[i].col];
b.smArrary[j].row= smArrary[i].col;
b. smArrary[j].col= smArrary[i].row;
b. smArrary[j].value= smArrary[i].value;
rowStart[smArrary[i].col]++;//同行(新数组中)的下一个元素位置
}
}
delete[] rowSize; delete[] rowStart;
return b;
}
template<class T>
SpreMatrix<T>::FastTranspos( )
{
int *rowSize=new int[Cols];//建立辅助数组,记录原数组每列(即新数组每行)的元素个数
int *rowStart=new int[Cols];// 建立辅助数组,记录新数组非零元素在三元组表中的位置
SpreMatrix<T> b(Cols,Rows);
b.Rows= Cols; b. Cols = Rows; b.Terms= Terms;
if(Terms>0)
{
for(int i=0;i<Cols; i++) rowSize[i]=0;
for(int i=0;i<Terms; i++) rowSize[smArray[i].col]++;// smArray[i]为原数组三元组表数组
rowStart[0]=0;//求出非零元素(每行第一个)在新数组三元组表中的位置
for(int i=1; i <Cols; i++)
rowStart[i]= rowStart[i-1]+ rowSize[i-1];
for(int i=0;i<Terms; i++)//填写三元组表
{
int j=rowStart[smArray[i].col];
b.smArrary[j].row= smArrary[i].col;
b. smArrary[j].col= smArrary[i].row;
b. smArrary[j].value= smArrary[i].value;
rowStart[smArrary[i].col]++;//同行(新数组中)的下一个元素位置
}
}
delete[] rowSize; delete[] rowStart;
return b;
}