У меня есть массив 'struct student' в c.
struct student
{
int id;
char *name;
int age;
}
int n = 100; //number of students
struct student s[n] = ...
И у меня есть функция sortByField (Bubble sort) для сортировки массива в порядке определенного поля.
void sortByField(struct student *s, int n, int fieldIndex)
{
int i, j;
for(i=n-1; i>0; i--)
{
for(j=0; j<i; j++)
{
switch (fieldIndex)
{
case 1 : if(s[j].id>s[j+1].id) swapData(&s[i], &s[j+1]); break;
case 2 : if(strcmp(s[j].name, s[j+1].name)>0) swapData(&s[i], &s[j+1]); break;
case 3 : if(s[j].age>s[j+1].age) swapData(&s[i], &s[j+1]); break;
}
}
}
}
Например, если я передам 1 параметру fieldIndex
sortByField(s, n, 1);
, он отсортирует массив по id.Или, если я пройду 2, он будет сортировать по имени.И так далее.
Так же, как вы видели.Я использовал переключатель в цикле пузырьковой сортировки, чтобы определить, какое поле будет сравнивать или сортировать.Но мне это не нравится, я думаю, что это избыточно, чтобы снова и снова проверять случаи fieldIndex в цикле.
Я пытался переместить коммутатор из цикла дляэто нужно проверить только один раз, но я нахожусь в конце моего ума.