Сортировка массива структур внутри функции
Таким образом, у меня есть этот массив структур, который содержит данные о конкурентах в гонке. Вот как настроена структура:
struct competitor {
int compID;
char name[30];
int swimSecs;
int cyclSecs;
int runSecs;
int totalSecs;
};
Я использую этот сортировочный массив, чтобы расположить конкурентов в порядке от самого маленького до самого большого. compNum - количество конкурентов
void sort(struct competitor** a) {
int n = compNum;
struct competitor temp;
int i, j;
for (i = 1; i < n; i++)
for (j = 0; j < n - i; j++) {
if (a[j]->totalSecs > a[j + 1]->totalSecs) {
temp = *a[j];
a[j] = a[j + 1];
*a[j + 1] = temp;
}
}
return;
}
Но кажется, что при использовании временных и меняющихся структур, кажется, дублируются некоторые структуры, которые были введены пользователем, и перезаписываются существующие данные структуры. Может кто-нибудь понять, почему это может происходить, и как бы вы это исправить? заранее спасибо
1 ответ
Вы должны либо поменять местами структуры, что делает код:
temp = *a[j];
*a[j] = *a[j + 1]; // copy the structure
*a[j + 1] = temp;
Или, что более предпочтительно для эффективности, просто поменяйте местами указатели:
struct competitor *temp;
...
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
Код в настоящее время делает немногое из того, что не будет работать.