User Tools

Site Tools


dydaktyka:aisd:2016:sort

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
dydaktyka:aisd:2016:sort [2016/05/25 15:37]
pkleczek
— (current)
Line 1: Line 1:
-====== Sortowanie ====== 
- 
-===== Cel laboratorium ===== 
- 
-  * Wprowadzenie do algorytmów sortowania: sortowanie metodą bąbelkową,​ sortowanie przez proste wybieranie, sortowanie przez proste wstawianie. 
- 
-===== Teoria ===== 
- 
-==== Sortowanie - co to? ==== 
- 
-  * **Sortowanie** polega na **uporządkowaniu** zbioru danych względem pewnych cech charakterystycznych każdego elementu tego zbioru. 
-  * Najczęstszym przypadkiem jest sortowanie względem wartości każdego elementu, np. sortowanie liczb, sortowanie słów. 
-  * W przypadku liczb, sortowanie polega na znalezieniu kolejności liczb zgodnej z relacją $\leq$ lub $\geq$ 
-  * W przypadku słów (nazw) sortowanie polega na ustawieniu ich w porządku //​słownikowym//​ (lub //​alfabetycznym//​) zwanym także //​leksykograficznym//​. 
- 
-^ Rodzaj posortowania ^ Przykład (dla tablicy liczb) ^ 
-| brak | {{:​dydaktyka:​aisd:​2016:​numerical_array_sort_example_unsorted.png?​direct|}} | 
-| zgodnie z relacją $\leq$ (rosnąco) | {{:​dydaktyka:​aisd:​2016:​numerical_array_sort_example_leq.png?​direct|}} | 
-| zgodnie z relacją $\geq$ (malejąco) | {{:​dydaktyka:​aisd:​2016:​numerical_array_sort_example_geq.png?​direct|}} | 
- 
-==== Po co stosować sortowanie? ==== 
- 
-  * posortowane elementy można szybciej zlokalizować 
-  * posortowane elementy można przedstawić w bardziej czytelny sposób (np. kolejność alfabetyczna nazwisk) 
-  * posortowanie ułatwia wstawienie nowego elementu z zachowaniem porządku 
- 
-==== Stabilność algorytmu ==== 
- 
-Algorytm nazywamy **stabilnym**,​ jeśli podczas sortowania zachowuje on kolejność występowania elementów o tym samym kluczu. 
- 
-**Przykład** 
-^ Rodzaj posortowania ^ Tablica ^ 
-| tablica nieposortowana | {{:​dydaktyka:​aisd:​2016:​table_unsorted.png?​nolink|}} | 
-| tablica posortowana algorytmem stabilnym (klucz: wiek) | {{:​dydaktyka:​aisd:​2016:​table_stable-sort.png?​nolink|}} | 
-| tablica posortowana algorytmem niestabilnym (klucz: wiek) | {{:​dydaktyka:​aisd:​2016:​table_unstable-sort.png?​nolink|}} | 
- 
-===== Przykłady algorytmów sortowania ===== 
- 
-Uwagi do opisu algorytmów sortowania: 
-  * w opisie algorytmów sortowania będą używane tablice liczb całkowitych 
-  * wartość każdego sortowanego elementu jest jednocześnie kluczem sortowania 
-  * analizując daną metodę będziemy brali pod uwagę liczbę porównań, w której uczestniczą elementy sortowanej tablicy 
-  * zakładamy, że chcemy otrzymać tablicę posortowaną rosnąco 
- 
----- 
- 
-Jako uzupełnienie do zamieszczonych w kolejnych paragrafach opisów metod sortowania - proszę zapoznać się z animacjami: 
-  * [[http://​home.agh.edu.pl/​~jaworek/​Sortowania.htm|Wizualizacja sortowania]] 
-  * [[http://​www.sorting-algorithms.com/​|Wizualizacja efektywności]] 
-==== Sortowanie przez proste wybieranie ==== 
- 
-Sortowanie przez proste wybieranie (ang. //selection sort//) to podstawowy algorytm sortowania, łatwy do zrozumienia i implementacji. 
- 
-Algorytm polega na pobraniu kolejnego elementu z danych wejściowych i wstawieniu go w odpowiednie miejsce w tabeli wynikowej. 
- 
-=== Algorytm metody === 
- 
-  * Przyjmujemy,​ że tablica złożona z elementów $a_1, a_2, \cdots, a_n$ jest umownie podzielona na (posortowany) ciąg wynikowy: $(a_1, a_2, \cdots, a_{i-1})$ i (nieposortowany) ciąg źródłowy $(a_i, a_{i+1}, \cdots, a_{n})$. 
-  * W $i$-tym kroku szukamy w ciągu źródłowym najmniejszego elementu i zamieniamy go miejscem z elementem $a_i$. 
- 
-=== Przykład === 
- 
-[{{:​dydaktyka:​aisd:​2016:​selection_sort_example.png?​nolink|Schemat przebiegu sortowania tablicy sześciu liczb metodą przez proste wybieranie – składa się z pięciu rund. Na pomarańczowo zaznaczono ciąg źródłowy,​ a na zielono - ciąg wynikowy. Strzałkami zaznaczono pary elementów, które podlegają zamianie.}}] 
- 
-=== Uwagi === 
- 
-Zalety: 
-  * wydajny dla danych wstępne posortowanych 
-  * wydajny dla zbiorów o niewielkiej liczebności 
-  * małe zasoby zajmowane podczas pracy (sortowanie w miejscu((Termin //​sortowanie w miejscu// oznacza, że nie potrzeba osobnej tablicy do przechowywania posortowanych wartości - zamiana odbywa się w ramach początkowej tablicy.))) 
-  * stabilność 
-  * prostota implementacji 
- 
-Wady: 
-  * mała efektywność dla normalnej i dużej ilości danych 
- 
- 
-==== Sortowanie przez proste wstawianie ==== 
- 
-Sortowanie przez proste wstawianie (ang. //insertion sort//) to podstawowy algorytm sortowania, łatwy do zrozumienia i implementacji. 
- 
-Algorytm polega na pobraniu kolejnego elementu z danych wejściowych i wstawieniu go w odpowiednie miejsce w tabeli wynikowej. 
- 
-=== Algorytm metody === 
- 
-  * Utwórz zbiór elementów posortowanych i przenieś do niego dowolny element ze zbioru nieposortowanego. 
-  * Weź dowolny element ze zbioru nieposortowanego. 
-  * Wyciągnięty element porównuj z kolejnymi elementami zbioru posortowanego póki nie napotkasz elementu równego lub elementu większego (jeśli chcemy otrzymać ciąg niemalejący) lub nie znajdziemy się na początku/​końcu zbioru uporządkowanego. 
-  * Wyciągnięty element wstaw w miejsce gdzie skończyłeś porównywać. 
-  * Jeśli zbiór elementów nieuporządkowanych jest niepusty, wróć do punkt 2. 
- 
-=== Przykład === 
-[{{:​dydaktyka:​aisd:​2016:​insertion_sort_example.png?​nolink|Schemat przebiegu sortowania tablicy sześciu liczb metodą przez proste wstawianie – składa się z pięciu rund. Na pomarańczowo zaznaczono ciąg źródłowy,​ a na zielono - ciąg wynikowy. Strzałkami zaznaczono zmianę miejsc elementów w danej rundzie.}}] 
- 
-==== Sortowanie bąbelkowe ==== 
- 
-Sortowanie bąbelkowe (ang. //bubble sort//) polega na porównywaniu ze sobą dwóch kolejnych elementów i - jeśli to konieczne - zamianie ich kolejności. 
- 
-Nazwa metody wzięła się stąd, że kolejne porównania powodują "​wypychanie"​ kolejnego największego elementu na koniec. 
- 
-=== Algorytm metody (wersja podstawowa) === 
- 
-  - Porównujemy pierwszy i drugi element tabeli i - jeśli trzeba - to zamieniamy je miejscami. Następnie podobnie porównujemy drugi i trzeci element i - jeśli to konieczne - zamieniamy je miejscami, itd. 
-  - Powyższe operacje wykonujemy, aż dojdziemy do końca tabeli. 
-  - Następnie ponownie rozpoczynamy porównywanie elementów od początku tabeli. 
-  - Sortowanie kończymy, gdy podczas kolejnego przejścia przez całą tabelę nie wykonana zostanie żadna zamiana. 
- 
-=== Przykład === 
- 
-[{{:​dydaktyka:​aisd:​2016:​bubble_sort_example.png?​nolink|Schemat przebiegu sortowania tablicy sześciu liczb metodą bąbelkową – składa się z sześciu rund. Na czerwono zaznaczono pary elementów, które podlegają zamianie.}}] 
- 
-=== Uwagi === 
- 
-Zalety: 
-  * prosta realizacja 
-  * niskie zużycie pamięci (bo: sortowanie w miejscu) 
-  * stabilność 
- 
-Wady: 
-  * mała efektywność obliczeń 
- 
-==== Sortowanie metodą quick-sort ==== 
- 
-[[dydaktyka:​aisd:​2016:​sort_quick-sort|Teoria i przykład]] (materiał dodatkowy) 
- 
-====== Zadania ====== 
- 
-===== Zadanie BUBBLE ===== 
-([size=10]poziom trudności:​[/​size] {{stars>​2/​4}}) 
- 
-Narysuj schemat blokowy sortujący tablicę metodą bąbelkową (//bubble sort//). 
- 
-===== Zadanie SELECT ===== 
-([size=10]poziom trudności:​[/​size] {{stars>​2/​4}}) 
- 
-Narysuj schemat blokowy sortujący tablicę metodą przez proste wybieranie (//​selection sort//). 
- 
-===== Zadanie INSERT ===== 
-([size=10]poziom trudności:​[/​size] {{stars>​2/​4}}) 
- 
-Narysuj schemat blokowy sortujący tablicę metodą przez proste wstawianie (//​insertion sort//). 
- 
-====== Pytania ====== 
- 
-  - Który algorytm sortowania jest najefektywniejszy w sortowaniu danych uporządkowanych?​ 
-  - Który algorytm sortowania jest najefektywniejszy w sortowaniu danych odwrotnie posortowanych?​ 
-  - Który algorytm sortowania jest najefektywniejszy w sortowaniu danych przypadkowych?​ 
- 
  
dydaktyka/aisd/2016/sort.1464183434.txt.gz · Last modified: 2020/03/25 11:46 (external edit)