Сортировка массива структур внутри функции

Таким образом, у меня есть этот массив структур, который содержит данные о конкурентах в гонке. Вот как настроена структура:

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;

Код в настоящее время делает немногое из того, что не будет работать.

Другие вопросы по тегам