对函数内的结构数组进行排序
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;
目前的代码同时做了一点,这不会起作用。
所以我有这个结构数组,用于保存比赛中参赛者的数据。这是结构的设置方式:
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;
目前的代码同时做了一点,这不会起作用。