Sortowanie danych
Transkrypt
Sortowanie danych
Sortowanie danych Jolanta Bachan 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 2013-06-06 Sortowanie danych Jolanta Bachan 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 2013-06-06 Sortowanie danych Jolanta Bachan 3 Liczba porównań w algorytmie porządkowania przez wybór . ... . . 100 99+98+97+96+...+5+4+3+2+1 100*99/2 = 50*99 = 4950 2013-06-06 Sortowanie danych Jolanta Bachan 100-1 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 2013-06-06 Sortowanie danych Jolanta Bachan 5 Sortowanie przez wstawianie 2013-06-06 0 1 2 3 4 0 1 2 3 4 7 10 8 3 5 ? ? ? ? ? 0 1 2 3 4 0 1 2 3 4 7 10 8 3 5 7 ? ? ? ? 0 1 2 3 4 0 1 2 3 4 ? 10 8 3 5 7 10 ? ? ? 0 1 2 3 4 0 1 2 3 4 ? ? 8 3 5 7 8 10 ? ? 0 1 2 3 4 0 1 2 3 4 ? ? ? 3 5 3 7 8 10 ? 0 1 2 3 4 0 1 2 3 4 ? ? ? ? 5 3 5 7 8 10 0 1 2 3 4 0 1 2 3 4 ? ? ? ? ? 3 5 7 8 10 Sortowanie danych Jolanta Bachan 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 2013-06-06 Sortowanie danych Jolanta Bachan 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ę. 0 5 ● 1 2 2 3 3 10 4 12 5 15 Animacja szybkiego sortowania 2013-06-06 Sortowanie danych Jolanta Bachan 6 14 Drzazga et al. 2001 8 Sortowanie szybkie (QuickSort) 0 5 1 2 2 3 3 10 4 12 sortujemy 0 2 1 3 2 5 5 15 6 14 sortujemy 3 10 4 12 5 14 6 15 Drzazga et al. 2001 2013-06-06 Sortowanie danych Jolanta Bachan 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 2013-06-06 Sortowanie danych Jolanta Bachan 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 2013-06-06 Sortowanie danych Jolanta Bachan 11 Pseudokod QuickSort PROCEDURE Quicksort(l, r) BEGIN IF l < r THEN { jeśli fragment dłuższy niż 1 element } BEGIN i = PodzielTablice(l, r); { podziel i zapamiętaj punkt podziału } Quicksort(l, i-1); { posortuj lewą część } Quicksort(i, r); { posortuj prawą część } END END Rekursja / Rekurencja – odwołanie się funkcji lub definicji do samej siebie 2013-06-06 Sortowanie danych Jolanta Bachan 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? 2013-06-06 Sortowanie danych Jolanta Bachan 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. 2013-06-06 Sortowanie danych Jolanta Bachan 14