Upload files to "DS/C/Lab/Week4"
This commit is contained in:
parent
7ac01bf45d
commit
931c11992e
40
DS/C/Lab/Week4/fasttranspose.c
Normal file
40
DS/C/Lab/Week4/fasttranspose.c
Normal file
@ -0,0 +1,40 @@
|
||||
#include <stdio.h>
|
||||
|
||||
#define MAX_TERMS 100
|
||||
#define MAX_COL 100
|
||||
|
||||
struct Element {
|
||||
int row, col, value;
|
||||
};
|
||||
|
||||
void fastTranspose(struct Element *a, struct Element *b, int m, int n, int num) {
|
||||
int rowTerms[MAX_COL] = {0};
|
||||
int rowStart[MAX_COL] = {0};
|
||||
int i, j;
|
||||
|
||||
for (i = 0; i < num; i++)
|
||||
rowTerms[a[i].col]++;
|
||||
|
||||
for (i = 1; i < n; i++)
|
||||
rowStart[i] = rowStart[i-1] + rowTerms[i-1];
|
||||
|
||||
for (i = 0; i < num; i++) {
|
||||
j = rowStart[a[i].col]++;
|
||||
b[j].row = a[i].col;
|
||||
b[j].col = a[i].row;
|
||||
b[j].value = a[i].value;
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
struct Element a[MAX_TERMS] = {{0, 1, 3}, {1, 2, 5}, {2, 0, 2}, {3, 1, 4}};
|
||||
struct Element b[MAX_TERMS];
|
||||
int m = 4, n = 3, num = 4;
|
||||
|
||||
fastTranspose(a, b, m, n, num);
|
||||
|
||||
for (int i = 0; i < num; i++)
|
||||
printf("%d %d %d\n", b[i].row, b[i].col, b[i].value);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user