Algorytmy sortowania
- sortowanie przez proste wybieranie (selection sort)
- sortowanie przez proste wstawianie (insertion sort)
- sortowanie przez prostą zamianę (bubble sort)
- sortowanie przez kopcowanie (heapsort)
- sortowanie przez zliczanie (counting sort)
- sortowanie przez scalanie (merge sort)
- sortowanie za pomocą malejących przyrostów (shell sort)
- sortowanie szybkie (quicksort)
Termin oddawania programów i wyników eksperymentów (+ wykresy): 19.03.2018
Termin dostarczenia sprawozdania (mailem pdf): 26.03.2018
Zadania
- zaimplementuj następujące algorytmy: insertion sort, bubble sort, selection sort oraz merge sort
- wygeneruj n-elementowe zbiory wejściowe; ciąg danych jest ułożony w sposób losowy, rosnący, malejący, stały, A-kształtny (rosnąco-malejący, np. 1,3,5,7,9,8,6,4,2)
Dla 10 różnych wartości n (dobrane wartości tak, żeby można było dokonać pomiaru czasu) utwórz następujące wykresy t=f(n)
- porównaj dla każdego algorytmu efektywność jego działania w zależności od danych wejściowych (4 wykresy – dla każdego algorytmu)
- porównaj dla każdego rodzaju danych wejściowych efektywność działania różnych algorytmów (5 wykresów – dla każdego rodzaju danych wejściowych)
Zaimplementuj algorytm quicksort w dwóch różnych implementacjach: rekurencyjnie oraz iteracyjnie (z własną implementacją stosu). Dla obu wersji porównaj różne sposoby wyboru klucza do porównania: skrajnie prawego, losowo wybranego elementu ciągu. Utwórz 2 wykresy porównujące efektywność działania algorytmów w zależności od wyboru różnego klucza.
- porównaj na każdym wykresie efektywność działania algorytmu w zależności od danych wejściowych (ciąg liczb: malejący, stały, losowy, A-kształtny) dla 10 różnych wartości n
Do sprawozdania: Jaka jest złożoność badanych algortymów? Czy rozkład danych wejściowych wpływa na działanie algorytmu (najgorsze, najlepsze przypadki)?
Materiały: