Когда задача касается сортировки массивов, qsort
- в большинстве случаев - ваш друг.
Все, что вам нужно сделать, - это предоставить функцию сравнения , которая сообщает, элемент меньше, равен или больше другого элемента. Затем qsort
обрабатывает все остальное.
Пример:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Student{
char name[61];
char surname[61];
char sex[10];
char age[3];
char id[12];
float gpa;
};
void printData(struct Student* s, int n)
{
for (int i=0; i<n; ++i)
{
printf("%s %s %s %s %s %f\n",
s[i].sex, s[i].name, s[i].surname, s[i].age, s[i].id, s[i].gpa);
}
}
// Compare function for qsort
int cmp(const void *p1, const void *p2)
{
struct Student* pa = (struct Student*)p1;
struct Student* pb = (struct Student*)p2;
return strcmp(pa->name, pb->name);
}
int main(void)
{
struct Student data[3] = {
{"bbb", "bbbb", "Mr", "42", "idx", 42.0},
{"ccc", "cccc", "Ms", "42", "idy", 43.0},
{"aaa", "aaaa", "Mr", "42", "idz", 44.0}
};
printf("Before sorting:\n");
printData(data, 3);
qsort(data, 3, sizeof data[0], cmp);
printf("After sorting:\n");
printData(data, 3);
return 0;
}
Выход:
Before sorting:
Mr bbb bbbb 42 idx 42.000000
Ms ccc cccc 42 idy 43.000000
Mr aaa aaaa 42 idz 44.000000
After sorting:
Mr aaa aaaa 42 idz 44.000000
Mr bbb bbbb 42 idx 42.000000
Ms ccc cccc 42 idy 43.000000