# 147. [CPE] Sort! Sort!! and Sort!!!

user_6817964
c_cpp
2 years ago
1.9 kB
3
Indexable
Never
```typedef struct List {
int num;
int mod;
int Even_Odd;
} List;

void main() {
int n, m;
List* seq;
scanf("%d %d", &n, &m);

seq = (List*)malloc(sizeof(List) * n);

for (int i = 0; i < n; i++) {
scanf("%d", &seq[i].num);
seq[i].mod = seq[i].num % m;
if (seq[i].num % 2 == 0) {
seq[i].Even_Odd = 1; // 偶數
}
else {
seq[i].Even_Odd = 0; //奇數
}
}

for (int i = 1; i < n; i++) {
for (int j = i; j > 0; j--) {
if (seq[j].mod < seq[j - 1].mod) {
List Tmp = seq[j - 1];
seq[j - 1] = seq[j];
seq[j] = Tmp;
}
else if (seq[j].mod == seq[j - 1].mod) {
if (seq[j].Even_Odd + seq[j - 1].Even_Odd == 1) {
if (seq[j].Even_Odd == 0) {
List Tmp = seq[j - 1];
seq[j - 1] = seq[j];
seq[j] = Tmp;
}
}
else if (seq[j].Even_Odd + seq[j - 1].Even_Odd == 0) {
if (seq[j - 1].num < seq[j].num) {
List Tmp = seq[j - 1];
seq[j - 1] = seq[j];
seq[j] = Tmp;
}
}
else if (seq[j].Even_Odd + seq[j - 1].Even_Odd == 2) {
if (seq[j - 1].num > seq[j].num) {
List Tmp = seq[j - 1];
seq[j - 1] = seq[j];
seq[j] = Tmp;
}
}
}
}
}

printf("%d %d\n", n, m);
for (int i = 0; i < n; i++) {
printf("%d\n", seq[i].num);
}
printf("%d %d", 0, 0);

free(seq);

}```