@peceha,
post #3
Przemyślałem jeszcze kwestię wyboru algorytmu sortowania. Ponieważ w przeciwieństwie do tablicy (a o niej rozwodzą się wszystkie podręczniki rozważające temat sortowania), wstawianie elementu w środek listy jest bardzo proste, po prostu zrób drugą, pustą listę i poprzekładaj elementy z pierwszej do drugiej od razu po kolei.
Nie wiem tylko które podejście będzie lepsze:
1. Iterowanie listy źródłowej w poszukiwaniu elementu najmniejszego i wstawianie go zawsze na koniec listy docelowej.
2. Pobieranie dowolnego (np. zawsze pierwszego) elementu listy źródłowej, następnie iterowanie listy docelowej w celu znalezienia odpowiedniego miejsca i wstawienie.
Oba algorytmy pracują do momentu, gdy lista źródłowa będzie pusta. Potem żeby sobie nie komplikować kodu można nadpisać header listy źródłowej headerem listy wynikowej.
Oba algorytmy będą szybsze niż bąbelkowe sortowanie jednej listy i są proste do napisania.
nieco później
Algorytm 2 powinien być szybszy prawie zawsze. Pierwszy będzie zawsze robił mniej więcej N^2/2 porównań (N to liczba sortowanych elementów). Listę źródłową trzeba zawsze czesać do końca, bo nigdy nie wiemy gdzie będzie ten najmniejszy element. Drugi algorytm w przypadku skrajnie niekorzystnym też wykona N^2/2 porównań (lista źródłowa już posortowana, kolejny element zawsze trafia na koniec docelowej), ale w skrajnie korzystnym tylko N (lista źródłowa posortowana odwrotnie), średnio więc będzie mniej.
Ostatnia aktualizacja: 20.09.2019 23:47:01 przez Krashan