对函数内的结构数组进行排序

Sorting an array of structs within a function

所以我有这个结构数组,用于保存比赛中参赛者的数据。这是结构的设置方式:

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;
}

但是似乎在使用 temp 和交换结构时,它似乎复制了一些用户输入的结构并覆盖了现有的结构数据。任何人都可以看到为什么会发生这种情况,您将如何解决?提前谢谢你

你应该交换结构,这使得代码成为:

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;

目前的代码同时做了一点,这不会起作用。