Struktury danych i złożoność obliczeniowa

Transkrypt

Struktury danych i złożoność obliczeniowa
Struktury danych i złożoność obliczeniowa
ćwiczenia 16 marca i 23 marca 2009
Algorytmy sortowania
1. Sortowanie bąbelkowe (Bubble-sort)
Algorytm sortowania bąbelkowego polega na porównywaniu par elementów leżących obok
siebie i, jeśli jest to potrzebne, zmienianiu ich kolejności. Czyli w pierwszym przebiegu
porównujemy (i ewentualnie zamieniamy) element pierwszy i drugi, drugi i trzeci itd. Proces taki
powtarzany jest n razy. Algorytm można usprawnić gdy za każdym przebiegiem porządkować
będziemy elementy od 1 do i-1.
Zadanie:
Posortować elementy: 6, 1, 4, 7, 2, 9 stosując sortowanie bąbelkowe.
2. Sortowanie przez wstawianie (insert-sort)
W algorytmie sortowania przez wstawianie zbiór danych dzielony jest na dwie części: na
część uporządkowaną i część nieuporządkowaną. Na początku część uporządkowana jest pusta a
część nieuporządkowana zawiera wszystkie elementy do posortowania. Algorytm działa w sposób
następujący: bierzemy najmniejszy element z części nieuporządkowanej a następnie wstawiamy go
w odpowiednie miejsce części uporządkowanej. W tym celu przeszukujemy (element po elemencie
od strony lewej do prawej) część uporządkowaną i wstawiamy nowy element w miejscu, gdzie
poprzedni element jest mniejszy od wstawianego a kolejny jest większy od wstawianego.
Zadanie:
Posortować elementy: 6, 1, 3, 4, 7, 2, 5, 9 stosując sortowanie przez wstawianie.
3. Sortowanie przez wstawianie z binarnym umieszczaniem
Sortowanie przez wstawianie z binarnym umieszczaniem stanowi modyfikację zwykłego
sortowania przez wstawianie. Modyfikacja pojawia się na etapie wyszukiwania miejsca, gdzie
należy umieścić nowy element w części uporządkowanej. Stosuje się wówczas wyszukiwanie
binarne (odpowiedniego miejsca).
Zadanie:
Stosując wyszukiwanie binarne wstawić element o wartości „3” do następującego ciągu:
1, 2, 4, 5, 6, 7, 8, 9, A, C, F
4. Sortowanie przez wybór (najmniejszego elementu)
Algorytm sortowania przez wybór polega na znajdowaniu elementu o wartości najmniejszej
i wstawianiu go na koniec części uporządkowanej (część uporządkowana jest na początku tablicy
elementów) bądź największego i wstawianiu go na początek części uporządkowanej (część
uporządkowana znajduje się wówczas na końcu tablicy elementów). Operację powtarzamy dopóty,
dopóki część nieuporządkowana nie będzie zbiorem pustym.
Zadanie:
Posortować stosując sortowanie przez wybór zbiór 0, 7, 3, B, 2, 9, A.
5. Sortowanie przez scalanie (merge-sort)
Sortowanie przez wstawianie jest algorytmem rekurencyjnym:
◦ dany ciąg danych rozbić należy na dwa podciagi (równe bądź różniące się ilością
elementów o jeden),
◦ każdy z ciągów posortować algorytmem przez scalanie,
◦ posortowane podciągi połączyć zdejmując pierwszy element z tego podciągu, którego
wartość pierwszego elementu jest mniejsza i dodać tenże element do listy posortowanej.
Zadanie:
Posortować elementy F, 0, B, 6, 2, C, 4, A, 3 stosując sortowanie przez scalanie.
6. Sortowanie szybkie (quick-sort)
Sortowanie szybkie również jest algorytmem rekurencyjnym:
◦ dany ciąg rozłożyć na dwa podciągi poprzez podział: bierzemy pierwszy element danego
ciągu; na lewo od niego umieszczamy kolejno elementy mniejsze od niego a na prawo
od niego umieszczamy elementy większe od niego,
◦ każdy z podciągów podlega sortowaniu tą samą metodą,
◦ jeśli ciąg zawiera jeden element – uznajemy, że jest posortowany i rekurencja
zatrzymuje się.
Zadanie:
Posortować elementy F, 0, B, 6, 2, C, 4, A, 3 stosując sortowanie szybkie.