Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )

Podobne dokumenty
Strategia "dziel i zwyciężaj"

Sortowanie. LABORKA Piotr Ciskowski

Algorytmy i struktury danych

Sortowanie przez scalanie

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Wstęp do programowania

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!

Algorytmy sortujące i wyszukujące

Laboratorium nr 7 Sortowanie

Struktury Danych i Złożoność Obliczeniowa

Programowanie w VB Proste algorytmy sortowania

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 9. Karol Tarnowski A-1 p.

Sortowanie. Bartman Jacek Algorytmy i struktury

Algorytmy i Struktury Danych.

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Matematyczne Podstawy Informatyki

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

Efektywna metoda sortowania sortowanie przez scalanie

Analiza algorytmów zadania podstawowe

PODSTAWY INFORMATYKI wykład 5.

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Sortowanie przez wstawianie Insertion Sort

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Algorytm selekcji Hoare a. Łukasz Miemus

Algorytmy. 1. Sortowanie 2. Statki i okręty. programowanie cz.7. poniedziałek, 2 marca 2009

znalezienia elementu w zbiorze, gdy w nim jest; dołączenia nowego elementu w odpowiednie miejsce, aby zbiór pozostał nadal uporządkowany.

INFORMATYKA SORTOWANIE DANYCH.

Sortowanie - wybrane algorytmy

TEORETYCZNE PODSTAWY INFORMATYKI

Wykład 4. Sortowanie

[12] Metody projektowania algorytmów (dziel i rządź, programowanie dynamiczne i algorytmy zachłanne).

Sortowanie bąbelkowe

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

Algorytmy i struktury danych

Temat 7. Najlżejsze i najcięższe algorytmy sortowania

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 9 Rekurencja

Metodyki i Techniki Programowania 2

Teoretyczne podstawy informatyki

Algorytmy sortujące 1

Wstęp do programowania. Dziel i rządź. Piotr Chrząstowski-Wachtel

Uwaga: Funkcja zamień(a[j],a[j+s]) zamienia miejscami wartości A[j] oraz A[j+s].

Sortowanie bąbelkowe - wersja nr 1 Bubble Sort

- - Ocena wykonaniu zad3. Brak zad3

Zadanie projektowe 1: Struktury danych i złożoność obliczeniowa

Złożoność obliczeniowa zadania, zestaw 2

PDF stworzony przez wersję demonstracyjną pdffactory Pro Program 15

Rekurencja/rekursja. Iluzja istnienia wielu kopii tego samego algorytmu (aktywacji) Tylko jedna aktywacja jest aktywna w danej chwili

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Wstęp do programowania

Zasady analizy algorytmów

Algorytmy sortujące. Sortowanie bąbelkowe

ALGORYTMY Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Wykład 3. Metoda dziel i zwyciężaj

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

Wstęp do programowania

Wykład 5: Iteracja, indukcja i rekurencja Sortowanie

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

TEORETYCZNE PODSTAWY INFORMATYKI

TEORETYCZNE PODSTAWY INFORMATYKI

. Podstawy Programowania 1. Sortowanie tablic jednowymiarowych. Arkadiusz Chrobot. 16 listopada 2016

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI

Podstawy Programowania 1 Sortowanie tablic jednowymiarowych. Plan. Sortowanie. Sortowanie Rodzaje sortowania. Notatki. Notatki. Notatki.

Rekurencja. Przykład. Rozważmy ciąg

Algorytmy sortujące. sortowanie kubełkowe, sortowanie grzebieniowe

Programowanie Proceduralne

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

Podstawy Informatyki. Metalurgia, I rok. Rekurencja. skomplikowane zadanie. Rekurencja

Podstawy Informatyki. Metalurgia, I rok. Wykład 5 Rekurencja

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

Algorytmy i Struktury Danych. (c) Marcin Sydow. Sortowanie Selection Sort Insertion Sort Merge Sort. Sortowanie 1. Listy dowiązaniowe.

Algorytmy i Struktury Danych.

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Zaawansowane algorytmy i struktury danych

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów.

Algorytmy i Struktury Danych. (c) Marcin Sydow. Introduction. QuickSort. Sortowanie 2. Limit. CountSort. RadixSort. Summary

Zajęcia 6 wskaźniki i tablice dynamiczne

Laboratoria nr 1. Sortowanie

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Algorytmy sortowania wewnętrznego

Teoretyczne podstawy informatyki

Wybrane algorytmy tablicowe

Sortowanie zewnętrzne

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał

EGZAMIN MATURALNY W ROKU SZKOLNYM 2017/2018 INFORMATYKA

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński

Informatyka A. Algorytmy

funkcje rekurencyjne Wykład 12. Podstawy programowania (język C) Funkcje rekurencyjne (1) Funkcje rekurencyjne (2)

Część I. Uwaga: Akceptowane są wszystkie odpowiedzi merytorycznie poprawne i spełniające warunki zadania. Zadanie 1.1. (0 3)

Algorytmy i struktury danych

Podstawy programowania. Wykład: 8. Wskaźniki. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wykład 5. Sortowanie w czasie liniowologarytmicznym

5. Podstawowe algorytmy i ich cechy.

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium Nr 4

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Wykład 4: Iteracja, indukcja i rekurencja

Sortowanie Shella Shell Sort

Wstęp do programowania

Transkrypt:

SORTOWANIE 1

SORTOWANIE Proces ustawiania zbioru elementów w określonym porządku. Stosuje się w celu ułatwienia późniejszego wyszukiwania elementów sortowanego zbioru. 2

Definicja Ciąg wejściowy: a 1, a 2,, a n-1, a n Funkcja uporządkowująca: f Sortowanie polega na: f(a 1 ) f(a 2 ) f(a n ) 3

Drzewo decyzji a < b b < c a < c a < b < c a < c b < a < c b < c a < c < b c < a < b b < c < a c < b < a 4

Sortowanie wewnętrzne Sortowane zbiory przechowywane są w szybkiej i o dostępie bezpośrednim, wewnętrznej pamięci komputera. Strukturą danych jest tablica 5

Sortowane zewnętrzne Sortowane zbiory przechowywane są w bardziej powolnej, ale pojemnej, zewnętrznej pamięci komputera w urządzeniach poruszanych mechanicznie. Odpowiednią strukturą danych jest plik. 6

Sortowanie tablic Wszystkie elementy sortowanego zbioru przechowywane są w pamięci. Jeśli algorytm nie tworzy w procesie sortowania dodatkowych tablic pomocniczych, to jest określany sortujący w miejscu. Ocena efektywności algorytmu złożoność: Liczba porównań Liczba przesunięć 7

Sortowanie przez wybieranie 1. wyznaczenie najmniejszego elementu w ciągu; 2. zamiana z pierwszym elementem w ciągu; 3. wyznaczenie najmniejszego elementu w a[2 n]; 4. zamianie go z drugim elementem: 5. wyznaczeniu najmniejszego elementu w a[3 n] 6. zamianie go z trzecim elementem; 7. 8

SORTOWANIE przez wybieranie Ciąg wynikowy: a 1,a 2,,a i-1 Ciąg źródłowy: a i,a i+1,,a n! W każdym kroku od i=1 i kończąc na i=n-1, zwiększając i++ z ciągu źródłowego wybierany jest element najmniejszy i zamieniany z elementem a i. 9

Sortowanie przez wybieranie 4 6 5 1 2 3 1 6 5 4 2 3 1 2 5 4 6 3 1 2 3 4 6 5 1 2 3 4 5 6 kolor -- minimum -- element do zamiany -- element zamieniony -- element poprawny! 1 2 3 4 5 6 10

Schemat blokowy Kolejna iteracja kolejny wiersz Szukanie min Zamiana elementów 11

Pętla wewnętrzna - szukanie min i=0, min=tab[0] i++ N i<n T! min>tab[i] T min=tab[i] N 12

Sortowanie przez wybieranie - kod int main(int argc, char* argv[]) { int t[6]={3,55,4,1,2,9}; const int n=6; int k,min;! for(int i=0; i<n-1; i++) { k=i; min=t[i]; for(int j=i+1; j<n; j++) { if(t[j]<min) { k=j; min=t[j]; } } t[k]=t[i]; t[i]=min; } PRZESTAWIENIA PORÓWNANIA MIN 3(n-1) (n 2 -n)/2 ŚR.? (n 2 -n)/2 MAX (n 2 /4)+ 3(n-1) (n 2 -n)/2 13

Podsumowanie sortowanie przez wybieranie mała ilość przestawień równa liczbie elementów-1 duża liczba porównań; 14

Sortowanie bąbelkowe Sortowanie bąbelkowe polega na przeglądaniu od końca/początku sortowanej tablicy i zamianie miejscami elementów jeśli są one w kolejności odwrotnej tj. pierwszy jest mniejszy od drugiego.! Po zakończeniu pierwszego przejścia element najmniejszy powinien się znajdować na odpowiednim dla niego miejscu czyli na początku tablicy. 15

Sortowanie przez zamianę - bąbelkowe Powtarzane są przejścia przez tablicę przesuwając za każdym razem najmniejszy/ największy z pozostałych elementów na wybrany koniec tablicy. 16

Bąbelki 17

Sortowanie bąbelkowe c.d. { int t[6]={3,55,455,1,2,9}; const int n=6; int k,min,tmp;! for(int i=1; i<n; i++) { for(int j=n-1; j>=i; j--) { if(t[j]<t[j-1]) { tmp=t[j]; t[j]=t[j-1]; t[j-1]=tmp; } } } PRZESTAWIENIA PORÓWNANIA MIN 0 (n 2 -n)/2 ŚR. 3(n 2 -n)/4 (n 2 -n)/2 MAX 3(n 2 -n)/2 (n 2 -n)/2 Przemiatanie tablicy Analiza 2 elementów sąsiadujących ze sobą 18

przykład 19

Uwagi sortowanie bąbelkowe częste puste przebiegi; wrażliwość na konfiguracje danych;! 4 2 6 18 20 39 40 4 6 18 20 39 40 2! Ulepszenia: Zapamiętywanie indeksu ostatniej zamiany; Przełączenie kierunków przeglądania tablicy 20

poprawa Sprawdzić czy dokonano jakiejkolwiek zmiany, jeżeli nie zakończyć algorytm;! Zapamiętanie indeksu ostatniej zmiany i przeprowadzenie następnego przebiegu tylko do tego indeksu. 21

Sortowanie przez wytrząsanie shaker-sort shaker.cpp 22

Sortowanie przez wstawianie Ciąg wynikowy: a 1,a 2,,a i-1 Ciąg źródłowy: a i,a i+1,,a n! Począwszy od i=2 i zwiększając i o 1 i-ty element ciągu źródłowego przenosi się do ciągu wynikowego wstawiając go w odpowiednim miejscu. 23

Proces szukania miejsca w zbiorze wynikowym Znalezienie elementu a j-1 mniejszego niż a i. Osiągnięto lewy koniec ciągu wynikowego. 24

Pseudokod for j! 2 to length(tab) do k! tab[j] i!j-1 while i>0 and tab[i] > k do tab[i+1]! tab[i] i! i-1 tab[i+1]!k tab[1 j-1] " karty w ręce tab[j+1 n] " karty na stole 25

26

Sortowanie typu: Dziel i zwyciężaj 27

Struktura rekurencyjna W celu rozwiązania danego problemu algorytmu wywołuje sama siebie przy rozwiązaniu podobnych problemów (silnia).! Metoda dziel i zwyciężaj. Problem jest dzielony na kilka mniejszy problemów podobnych do siebie.! Problemy te rozwiązywane są rekurencyjnie a następnie rozwiązania są łączone w celu rozwiązania całego problemu. 28

Etapy metody dziel i zwyciężaj DZIEL: dzielimy problemu na mniejsze. ZWYCIĘŻAJ: rozwiązujemy podproblemy rekurencyjnie POŁĄCZ: łączymy rozwiązania podproblemów, aby otrzymać 29

Dziel i zwyciężaj (1) Dzielimy zadanie posortowania całego ciągu na dwa podzadania: posortowania jego lewej i prawej połowy.! (2) Gdy obie części tworzą już ciągi uporządkowane, wtedy scalamy je otrzymując rozwiązanie. 30

Rekurencyjne dzielenie i scalanie Dzielenie: 74289721 72971 4872 791 27 47 82 71 9 2 7 4 7 8 2 7 1 31

Rekurencyjne dzielenie i scalanie Scalanie: 122477789 12779 2478 179 27 47 28 17 9 2 7 4 7 8 2 7 1 O(n+m) 32

Algorytm sortowanie przez scalanie Dziel " Dzielimy n-elementów ciąg na dwa podciągi po n/2 elementów każdy. Zwyciężaj " Sortujemy otrzymane podciągi, używając rekurencyjnie sortowania przez scalanie Połącz " Łączymy posortowane podciągi w jeden ciąg. 33

Operacja sortowania przez scalanie 34

35

36

Sortowanie przez podział Podział; Sortowanie podciągów otrzymanych w wyniku podziału; 37

WNIOSKI sortowanie przez wybieranie jest łatwym, ale wolnym sposobem sortowania; sortowanie przez scalanie jest szybszym, ale tez bardziej skomplikowanym algorytmem. algorytm sortowania przez wybieranie ~ O(n 2 ), algorytm sortowania przez scalanie ~ O(n log n). 38

http://www.cs.ubc.ca/spider/harrison/java/ sorting-demo.html 39