#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAXSIZE 12500
typedef struct {
int i, j;
int e;
}Triple;
typedef struct {
Triple data[MAXSIZE + 1];
int m, n, t;
}Matrix;
void create(Matrix& M) {
srand((unsigned)time(NULL));
printf("您想要输入非零元素的个数6<t<48:");
scanf("%d", &M.t);
for (int p = 1; p <= M.t; p++)
{
M.data[p].i = rand() % 6 + 1;
M.data[p].j = rand() % 8 + 1;
M.data[p].e = rand() % 100 + 1;
}
}
/7oid Bubblesort(Matrix& M) {
// if(M.data[])
//}
void Bubblesort(Matrix& M)
{
for (int i = M.t - 1, exchange = 1; i >= 1 && exchange; i--)
{
exchange = 0;
for (int j = 1; j <= i; j++)
{
if (M.data[j].i > M.data[j + 1].i)
{
M.data[0] = M.data[j];
M.data[j] = M.data[j + 1];
M.data[j + 1] = M.data[0];
exchange = 1;
}
else if (M.data[j].i == M.data[j + 1].i && M.data[j].j > M.data[j + 1].j)
{
M.data[0] = M.data[j];
M.data[j] = M.data[j + 1];
M.data[j + 1] = M.data[0];
exchange = 1;
}
}
}
}
void print(Matrix& X) //输出矩阵三元表
{
printf("三元表为:");
printf("\n");
printf("矩阵的行数:");
for (int k = 1; k <= X.t; k++)
{
printf("%d ", X.data[k].i);
}
printf("\n");
printf("矩阵的列数:");
for (int o = 1; o <= X.t; o++)
{
printf("%d ", X.data[o].j);
}
printf("\n");
printf("矩阵的数值:");
for (int p = 1; p <= X.t; p++)
{
printf("%d ", X.data[p].e);
}
}
void printf(Matrix& X) //打印矩阵函数
{
int c = 1;
for (int a = 1; a <= X.m; a++)
{
for (int b = 1; b <= X.n; b++)
{
if (c <= X.t && a == X.data[c].i && b == X.data[c].j)
{
printf("%4d", X.data[c].e);
c++;
}
else
printf("%4d", 0);
}
printf("\n");
}
}
void transpose(Matrix M, Matrix& T) { //矩阵三元表的转置
T.m = M.n; T.n = M.m; T.t = M.t;
int num[15] = { 0 };
int cpot[15] = { 0 };
if (T.t)
{
for (int col = 1; col <= M.n; ++col)
{
num[col] = 0;
}
for (int t = 1; t <= M.t; ++t)
{
++num[M.data[t].j];
}
//}
cpot[1] = 1;
for (int col2 = 2; col2 <= M.n; ++col2) {
cpot[col2] = cpot[col2 - 1] + num[col2 - 1];
}
for (int p = 1; p <= M.t; ++p)
{
int col = M.data[p].j;
int q = cpot[col];
T.data[q].i = M.data[p].j;
T.data[q].j = M.data[p].i;
T.data[q].e = M.data[p].e;
++cpot[col];
}
}
}
void main()
{
Matrix M, T;
M.m = 6;
M.n = 8;
create(M);
printf("随机生成的");
print(M);
Bubblesort(M);
printf("\n");
printf("\n");
printf("按行排序的");
print(M);
printf("\n");
printf("转置前矩阵为:");
printf("\n");
printf(M);
transpose(M, T);
printf("\n");
printf("转置后");
print(T);
printf("\n");
printf("转置后矩阵为:");
printf("\n");
printf(T);
}