#include <stdio.h>
typedef struct {
int score;
char group;
} Record;
void swap(Record *a, Record *b) {
Record temp = *a;
*a = *b;
*b = temp;
}
int partition(Record arr[], int low, int high) {
Record pivot = arr[high];
int i = low - 1;
for (int j = low; j < high; j++) {
if (arr[j].score <= pivot.score) {
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[high]);
return i + 1;
}
void quick_sort(Record arr[], int low, int high) {
if (low < high) {
int p = partition(arr, low, high);
quick_sort(arr, low, p - 1);
quick_sort(arr, p + 1, high);
}
}
void output(Record arr[], int n) {
int count = 0;
char last_group = '\0';
char strs[3][20] = {"", "", ""};
for (int i = n - 1; i >= 0; i--) {
if (count == 5) break;
char temp[5];
sprintf(temp, "%d ", arr[i].score);
strcat(strs[arr[i].group - 'A'], temp);
count++;
if (i > 0 && arr[i - 1].score == arr[i].score && count < 5) {
sprintf(temp, "%d ", arr[i - 1].score);
strcat(strs[arr[i - 1].group - 'A'], temp);
count++;
}
}
printf("A: %s\n", strs[0]);
printf("B: %s\n", strs[1]);
printf("C: %s\n", strs[2]);
}
int main() {
int A[] = {85 ,70 ,74 ,64 ,67 ,89 ,90 ,78 ,99 ,40};
int B[] = {87 ,72 ,73 ,61 ,92 ,89 ,60 ,68 ,79 ,60};
int C[] = {55 ,69 ,93 ,80 ,91 ,88 ,72 ,68 ,77 ,58};
Record arr[30];
for (int i = 0; i < 10; i++) {
arr[i].score = A[i];
arr[i].group = 'A';
arr[i + 10].score = B[i];
arr[i + 10].group = 'B';
arr[i + 20].score = C[i];
arr[i + 20].group = 'C';
}
quick_sort(arr, 0, 29);
output(arr, 30);
return 0;
}