[C++] Sortowanie listy
Ostatnio zmodyfikowano 2013-12-23 00:51
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 |
|
pekfos |
» 2013-12-14 10:15:09 Pętla forReszta zależy od implementacji listy. |
|
wister Temat założony przez niniejszego użytkownika |
» 2013-12-14 12:01:06 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. |
|
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. |
|
« 1 » |