Я изучаю C и пишу основную программу для хранения записей. Когда я пытаюсь отсортировать элементы в моем массиве структур (я не знаю, правильно ли я это сказал) в алфавитном порядке по фамилии, я обнаруживаю, что мне приходится вызывать функцию несколько раз, чтобы она фактически сортировала все элементы ,
Я полагаю, что проблема в ret = strcmp (rec [j2] .lastname, rec [j2 + 1] .lastname); и где это в коде. Он запускается один раз и сортирует два элемента в массиве, но мне приходится вызывать функцию несколько раз, чтобы она полностью сортировалась. Я попытался поместить эту строку в свой цикл for () и цикл while (), но пока не нашел решения.
typedef struct rec {
int recordnumber;
char firstname[20];
char lastname[20];
int age;
char gender;
} record;
void SortArr(record* rec, int numrecsread)
{
int sortchoice;
int i2, j2, temp, ret;
record *r1, *r2;
record trec;
printf("Press 1 to sort by record number or press 2 to sort by last name.\n");
scanf("%d", &sortchoice);
if (sortchoice == 1)
{
printf("You have chosen to sort record numbers in ascending order...\n");
for (i2 = 1; i2 < numrecsread; i2++)
{
for (j2 = 0; j2 < numrecsread - 1; j2++)
{
if (rec[j2].recordnumber > rec[i2].recordnumber)
{
Swap(&rec[i2], &rec[j2]);
}
}
}
}
else if (sortchoice == 2)
{
printf("You have chosen to sort last names alphabetically...\n");
for (i2 = 1; i2 < numrecsread; i2++)
{
for (j2 = 0; j2 < numrecsread - 1; j2++)
{
ret = strcmp(rec[j2].lastname, rec[j2 + 1].lastname); //this has to be called multiple times to fully sort
if (ret > 0)
{
Swap(&rec[i2], &rec[j2]);
}
}
}
}
else if (sortchoice < 1 || sortchoice > 2)
{
printf("Invalid input.\n");
}
}
Прямо сейчас у меня есть четыре записи, хранящиеся в моем массиве обратно в main. Ожидаемый результат состоит в том, что они сортируются в алфавитном порядке по фамилии всего за один вызов функции. Сортировка по номеру записи работает нормально.