Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Sortowanie listy

Ostatnio zmodyfikowano 2013-12-23 00:51
Autor Wiadomość
wister
Temat założony przez niniejszego użytkownika
[C++] Sortowanie listy
» 2013-12-14 00:00:05
Witajcie, otóż mam problem z posortowaniem alfabetycznie nazwisk w liscie. Muszę zrobić coś takiego:


foreach(x in lista)
for(x to end in lista)
if(swap_needed) swap(x, x.next)
+ sprawdzenie, czy wykonano 0 zmian (to lista posortowana)



Lecz nie wiem jak dokładnie ma być to zrobione w pętlach i przy zamianie wskaźników, więc proszę was o pomoc.


Pozdrawiam
P-99159
pekfos
» 2013-12-14 10:15:09
» Kurs C++ » Poziom 2Pętla for lekcja
Reszta zależy od implementacji listy.
P-99163
wister
Temat założony przez niniejszego użytkownika
» 2013-12-14 12:01:06
C/C++
void lista::sortuj() {
    dane * tmp = new dane;
    for( dane * baza = pierwsza; baza->next != NULL; baza = baza->next->next ) {
        if( strcmp((( smallLetters( baza->nazwisko ) ).c_str() ),(( smallLetters(( baza->next )->nazwisko ) ).c_str() ) ) > 0 ) {
            tmp = baza;
            baza = baza->next;
            tmp->next = baza->next;
            baza->next = tmp;
        }
    }
}



Funkcja smallLetters oczywiście zamienia wszystkie litery na małe..

W powyższym kodzie brakuje jeszcze jednej pętli + jest problem z znikającym wskaźnikiem (tmp)

Nie wiem jak to poprawić aby dobrze działało.
P-99173
DejaVu
» 2013-12-23 00:51:33
Skoro to jest lista, to zamiast zamieniać wskaźniki łatwiej by było zamieniać dane. Na liście jednokierunkowej musiałbyś pamiętać cztery wskaźniki, czyli:
jeżeli miałbyś listę A, B ,C, D oraz stwierdziłbyś, że C < B, to wówczas musiałbyś ustawić A->next = C oraz C->next = B; B->next = D. Pogrubione wartości to elementy aktualnie porównywane.
P-99895
« 1 »
  Strona 1 z 1