Рабочее предложение, извините, мне лень искать больше, что не так в вашей версии
#if 0
void exchange(struPerson* p1, struPerson* p2)
{
char * s;
s = p1->nachname;
p1->nachname = p2->nachname;
p2->nachname = s;
s = p1->vorname;
p1->vorname = p2->vorname;
p2->vorname = s;
/* exchange other fields except pNext of course
this is the disadvantage of that solution */
}
#else
/* other way but you have to check this works with your definition of struPerson */
void exchange(struPerson* p1, struPerson* p2)
{
struPerson p = *p1;
struPerson * p1next = p1->pNext;
struPerson * p2next = p2->pNext;
*p1 = *p2;
*p2 = p;
p1->pNext = p1next;
p2->pNext = p2next;
}
#endif
void sortListWithBubbleSort(struPerson* pStart) {
int modified;
do {
modified = 0;
struPerson* pElement;
for (pElement = pStart; pElement->pNext != NULL; pElement = pElement->pNext) {
int cmp = strcmp(pElement->nachname, pElement->pNext->nachname);
if ((cmp > 0) ||
((cmp == 0) && (strcmp(pElement->vorname, pElement->pNext->vorname) > 0))) {
exchange(pElement, pElement->pNext);
modified = 1;
}
}
} while (modified != 0);
}
Как обычно с пузырьковой сортировкой, это не правильный способ всегда проверять последний элементПоскольку последние элементы уже отсортированы после хотя бы одного хода, я позволю вам улучшить это в качестве упражнения: -)