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.