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