Lista jednokierunkowa - sortowanie

0

Witam,

Mam problem z posortowaniem struktury. Powinna być ona sortowana wg nazwiska, zamieniając wskaźniki do następnego elementu.

struct ELEMENT
{
    char imie[20];
    char nazwisko[20];
    int nr_indeksu;
    ELEMENT* next;
};

struct HEADER
{
    ELEMENT* head;
    ELEMENT* tail;
};
void Lista::sort() 
{ 
    unsigned short int ilosc = 0;
    for (ELEMENT* el = header.head; el; el = el->next) ++ilosc;
    ELEMENT* temp = new ELEMENT;
    unsigned short int i, j; 
    if (ilosc) ilosc--; 
    for(i = 0; i < ilosc; i++) 
        for (ELEMENT* el = header.head; el->next; el = el->next->next) 
    if(strcmp(el->nazwisko, el->next->nazwisko) > 0){ 
        temp = el; 
        el = el->next; 
        el->next = temp; 
    }
}

Na chwile obecną niestety program się wiesza, ale tylko jeżeli w pierwszej strukturze nazwisko jest zaczyna się na literę "większą" niż następna nazwisko na litere "niższą" np. po wprowadzeniu następujących danych: Jan Nowak 12345 i Adam Kowalski 54321

Dodawanie, usuwanie danych działa prawidłowo. Proszę o pomoc w poprawieniu mechanizmu sortowania.

0

Rozumiem, że z <algorithm> nie można skorzystać.

0
winerfresh napisał(a)

Rozumiem, że z <algorithm> nie można skorzystać.

Tylko jak posortować wskaźniki na następny element?

0
winerfresh napisał(a)

Rozumiem, że z <algorithm> nie można skorzystać.

żeby skorzystać z sort z <algorithm>, klasa musi mieć zdefiniowane iteratory, więc nie, nie można

1 użytkowników online, w tym zalogowanych: 0, gości: 1