Sortowanie danych Podstawy programowania 2013-06-06
Sortowanie przez wybieranie 9 9 9 9 9 9 10 7 7 7 7 7 10 9 1 3 3 4 10 7 7 10 10 10 10 4 4 4 4 4 4 3 3 3 3 2 2 2 2 2 2 2 3 1 1 1 1 1 1 Gurbiel et al. 2000 2
Algorytm porządkowania przez wybór Dane: Liczba naturalna n i zbiór n liczb Wynik: Uporządkowanie tego zbioru liczb od najmniejszej do największej Krok 1: Wykonaj n-1 razy kroki 2 i 3 (iteracja) Krok 2: Znajdź najmniejszy element w nieuporządkowanej jeszcze części zbioru Krok 3: Zamień miejscami znaleziony element i pierwszy element w nieuporządkowanej części zbioru Gurbiel et al. 2000 3
Liczba porównań w algorytmie porządkowania przez wybór.... 100-1 100 99+98+97+96+...+5+4+3+2+1 100*99/2 = 50*99 = 4950 1+99,2+98,3+97,itd. Carl Friedrich Gauss Gurbiel et al. 2000 4
Sortowanie przez wstawianie Istota algorytmu przez wstawianie jest intuicyjna i polega na pobieraniu kolejnych elementów wejściowej tablicy i wstawianiu ich w odpowiednie miejsce w uporządkowanej tablicy. Działanie algorytmu: Dopóki w tablicy A[] są jakieś elementy, wyciągnij z tablicy A[] kolejne elementy i wstawiaj na odpowiednie miejsce w tablicy W[] Drzazga et al. 2001 5
Sortowanie przez wstawianie 7 10 8 3 5 7 10 8 3 5? 10 8 3 5?? 8 3 5??? 3 5???? 5????? 7???? 7 10??? 7 8 10?? 3 7 8 10? 3 5 7 8 10????? 3 5 7 8 10 Drzazga et al. 2001 6
Sortowanie bąbelkowe Ciąg wejściowy [4,2,5,1,7]. Każdy wiersz symbolizuje wypchnięcie kolejnego największego elementu na koniec ( wypłynięcie największego bąbelka ). Niebieskim kolorem oznaczono końcówkę ciągu już posortowanego. Wikipedia 7
Sortowanie szybkie (QuickSort) Jeżeli elementy w tablicy A[] rozłożone są tak, że istnieje jakiś element o indeksie k taki, że wszystkie elementy o indeksach mniejszych od k mają wartości mniejsze od A[k], a wszystkie elementy o indeksie większym od k są nie mniejsze od A[k], to wystarczy osobno posortować elementy po obu stronach indeksu k, aby otrzymać posortowaną tablicę. 5 6 5 2 3 10 12 15 14 Animacja szybkiego sortowania Drzazga et al. 2001 8
Sortowanie szybkie (QuickSort) 5 6 5 2 3 10 12 15 14 sortujemy sortujemy 5 6 2 3 5 10 12 14 15 Drzazga et al. 2001 9
Sortowanie szybkie (QuickSort) Algorytm szybkiego sortowania jest sztandarowym przykładem metody dziel i zwyciężaj. 3 etapy algorytmu to: 1. Dziel dzielenie problemu na kilka podproblemów tego samego typu. 2. Zwyciężaj operacje rozwiązujące dany podproblem, najczęściej wykorzystujące rekurencję. 3. Scalaj instrukcje pozwalające na podstawie rozwiązanych podproblemów rozwiązać problem główny Drzazga et al. 2001 10
Dziel i zwyciężaj Dziel i zwyciężaj (ang. divide and conquer) jedna z głównych metod projektowania algorytmów w informatyce, prowadząca do bardzo efektywnych rozwiązań. Nazwa pochodzi od łacińskiej sentencji dziel i rządź (łac. divide et impera). W strategii tej problem dzieli się rekurencyjnie na dwa lub więcej mniejszych podproblemów tego samego (lub podobnego) typu tak długo, aż fragmenty staną się wystarczająco proste do bezpośredniego rozwiązania. Z kolei rozwiązania otrzymane dla podproblemów scala się uzyskując rozwiązanie całego zadania. Klasyczne przykłady algorytmów korzystających z tej metody to m.in. sortowanie przez scalanie (mergesort), sortowanie szybkie (quicksort), wyszukiwanie binarne. Wikipedia 11
Pseudokod QuickSort PROCEDURE Quicksort(l, r) BEGIN END IF l < r THEN BEGIN END { jeśli fragment dłuższy niż 1 element } i = PodzielTablice(l, r); { podziel i zapamiętaj punkt podziału } Quicksort(l, i-1); { posortuj lewą część } Quicksort(i, r); { posortuj prawą część } Rekursja / Rekurencja odwołanie się funkcji lub definicji do samej siebie Wikipedia 12
Zadania Dowiedz się, jak działa sortowanie przez scalanie i jak się ono różni od szybkiego sortowania Dowiedz się, co to jest kopiec i jak działa sortowanie kopcem Animacja sortowania Dowiedz się, jak działa sortowanie kubełkowe Jakie własności określają dobry algorytm sortujący? Co to jest stos i co oznacza LIFO? Co to jest kolejka i co oznacza FIFO? Co to jest sterta? 13
Bibliografia Mirosław Drzazga, Tomasz Francuz, Marcin Szeliga. 2001. Zagadnienia maturalne z informatyki. Helion. Ewa Gurbiel, Grażyna Hardt-Olejniczak, Ewa Kołczyk, Helena Krupicka, Maciej M. Sysło. 2000. Informatyka. Podręcznik dla ucznia gimnazjum. Wydawnictwa Szkolne i Pedagogiczne. Wikipedia. http://pl.wikipedia.org/wiki/ Dziel i zwyciężaj. Rekurencja. Szybkie sortowanie. 14