Sortowanie. LABORKA Piotr Ciskowski

Podobne dokumenty
Strategia "dziel i zwyciężaj"

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 )

Sortowanie. Bartman Jacek Algorytmy i struktury

Algorytmy i struktury danych

Algorytmy sortujące i wyszukujące

Programowanie w VB Proste algorytmy sortowania

Laboratorium nr 7 Sortowanie

Algorytmy i struktury danych

Analiza algorytmów zadania podstawowe

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

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

Sortowanie przez wstawianie Insertion Sort

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

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Wstęp do programowania

Algorytmy i Struktury Danych, 2. ćwiczenia

Sortowanie Shella Shell Sort

Struktury Danych i Złożoność Obliczeniowa

Algorytm selekcji Hoare a. Łukasz Miemus

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

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

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

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

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

Sortowanie przez scalanie

Ćwiczenie 3 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

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

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

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

Sortowanie - wybrane algorytmy

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

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

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

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

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

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

Zestaw 1: Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.adb i.ads)!!! Zad. 1: Zad. 2: 2,2,2 5,5,5,5,5,5 Zad.

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

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.

Wstęp do programowania

Metodyki i Techniki Programowania 2

Algorytmy i Struktury Danych.

Wstęp do programowania

INFORMATYKA SORTOWANIE DANYCH.

Hierarchiczna analiza skupień

Jeszcze o algorytmach

CO TO JEST ALGORYTM?

Efektywna metoda sortowania sortowanie przez scalanie

Sortowanie bąbelkowe

Algorytmy sortujące. Sortowanie bąbelkowe

Zestaw 1 ZESTAWY A. a 1 a 2 + a 3 ± a n, gdzie skªadnik a n jest odejmowany, gdy n jest liczb parzyst oraz dodawany w przeciwnym.

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Sortowanie bąbelkowe - wersja nr 1 Bubble Sort

PODSTAWY INFORMATYKI wykład 5.

Algorytmy sortujące 1

Rekurencje. Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie:

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

TEORETYCZNE PODSTAWY INFORMATYKI

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

Równoleg le sortowanie przez scalanie

KONSPEKT ZAJĘĆ KOŁA INFORMATYCZNEGO LUB MATEMATYCZNEGO W KLASIE III GIMNAZJUM LUB I LICEUM ( 2 GODZ.)

1.1. Uzupełnij poniższą tabelę: i wynik(i)

1. Napisz program, który wyświetli Twoje dane jako napis Witaj, Imię Nazwisko. 2. Napisz program, który wyświetli wizytówkę postaci:

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

Analiza algorytmów zadania podstawowe

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

Algorytmy sortowania wewnętrznego

Wykład 5. Sortowanie w czasie liniowologarytmicznym

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0,

Algorytmy i struktury danych. Wykład 4

Egzamin, AISDI, I termin, 18 czerwca 2015 r.

Luty 2001 Algorytmy (4) 2000/2001

Zaawansowane algorytmy i struktury danych

Teoretyczne podstawy informatyki

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

Zestaw 1 Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.adb)!!!

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je.

Źródła. N.Wirth Algorithms and Data Structures, 1985 D.E.Knuth The Art of Computer Programming. Vol. 3, 1973

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

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Wykład 5: Iteracja, indukcja i rekurencja Sortowanie

Zadanie 1. Potęgi (14 pkt)

Sortowanie zewnętrzne

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

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

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

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

Jednym z najprostszych sposobów porządkowania jest technika stosowana przy sortowaniu listów:

Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane

Znajdowanie największego i najmniejszego elementu w zbiorze n liczb całkowitych

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

Rozwiązywanie układów równań liniowych

Wykład 2. Poprawność algorytmów

Programowanie dynamiczne

ZADANIE 1. Ważenie (14 pkt)

Informatyka wprowadzenie do algorytmów (II) dr hab. inż. Mikołaj Morzy

Sortowanie. Tomasz Żak zak. styczeń Instytut Matematyki i Informatyki, Politechnika Wrocławska

Zajęcia 6 wskaźniki i tablice dynamiczne

Wstęp do programowania

Transkrypt:

Sortowanie LABORKA Piotr Ciskowski

main Zaimplementuj metody sortowania przedstawione w następnych zadaniach Dla każdej metody osobna funkcja Nagłówek funkcji wg uznania ale wszystkie razem powinny być spójne Daj wybór: rosnąco/malejąco Tablice mają być tworzone dynamicznie (w programie głównym) Zaimplementuj funkcję sprawdzającą poprawność posortowania dla mniejszych tablic może je wyświetlać na ekranie dla większych niech tylko sprawdza W programie głównym przeprowadź analizę efektywności algorytmów Posortuj 30 tablic i uśrednij czas działania każdej metody: Każdą tablicę posortuj każdą zaimplementowaną metodą - w danym przebiegu sortowana ma być ta sama tablica różnymi metodami - a potem średnia dla każdej metody Jedna trzydziestka dla: wszystkich elementów tablicy losowych Druga trzydziestka dla: 25% początkowych elementów posortowanych Trzecia trzydziestka dla: 50% początkowych elementów posortowanych Czwarta trzydziestka dla: 95% początkowych elementów posortowanych Piątka trzydziestka dla: 100% początkowych elementów posortowanych w odwrotnej kolejności I tak po pięć trzydziestek dla tablicy: małej, średniej, dużej i napisz krótkie sprawozdanko z wnioskami

zadanie 1 SORTOWANIE BĄBELKOWE

zadanie 1. sortowanie przez prostą zamianę czyli bąbelkowe porównywanie i zamiana par sąsiadujących elementów opis wg Łukasza Jelenia: Porównywane są dwa sąsiednie elementy tablicy, na początku ostatni i przedostatni. Jeśli ich kolejność jest niewłaściwa, to zamieniane są one miejscami. Porównanie powtarzane jest dla pozostałych elementów. Po pierwszym przebiegu element najmniejszy znajdzie się na początku tablicy (w części uporządkowanej). W kolejnych krokach procedura jest powtarzana, ale tylko dla nieuporządkowanej części tablicy. W ulepszonej wersji algorytmu sortowanie powinno zostać zakończone w sytuacji, gdy po wykonaniu całego przebiegu nie zostanie wykonana ani jedna zamiana. opis wikipedia: http://pl.wikipedia.org/wiki/sortowanie_b%c4%85belkowe ilustracja Hungarian dance: https://www.youtube.com/watch?v=lyzqpjut5b4

zadanie 1. sortowanie przez prostą zamianę schemat blokowy: P WE n, a 1,, a n i:=2 j:=n NIE a j-1 > a j TAK bufor:=a j a j :=a j-1 a j-1 :=bufor TAK j = i NIE j:=j-1 TAK i = n NIE i:=i+1 WY a 1,, a n K

zadanie 1. sortowanie przez prostą zamianę przykład:

zadanie 2 SORTOWANIE PRZEZ WYBIERANIE

zadanie 2. sortowanie przez wybieranie znajdowanie najmniejszego elementu w zbiorze przeniesienie na początek opis wikipedia: http://pl.wikipedia.org/wiki/sortowanie_przez_wybieranie ilustracja Gypsy dance: https://www.youtube.com/watch?v=ns4tptc8whw

zadanie 2. sortowanie przez wybieranie schemat blokowy - ogólny: i:=1 spośród elementów: a i,, a n znajdź najmniejszy: a k wymień a i z a k TAK i = n-1 NIE i:=i+1

zadanie 2. sortowanie przez wybieranie schemat blokowy - szczegółowy: P WE n, a 1,, a n i:=1 k:=i x:=a i j:=i+1 NIE a j < x TAK k:=j x:=a j TAK j = n NIE j:=j+1 a k :=a i a i :=x TAK i = n-1 NIE i:=i+1 WY a 1,, a n K

zadanie 2. sortowanie przez wybieranie przykład: TABLICA POCZĄTKOWA 16 5 12 33 0 8 3 1 przeglądanie 0 5 12 33 16 8 3 2 przeglądanie 0 3 12 33 16 8 5 3 przeglądanie 0 3 5 33 16 8 12 4 przeglądanie 0 3 5 8 16 33 12 5 przeglądanie 0 3 5 8 12 33 16 6 przeglądanie 0 3 5 8 12 16 33 TABLICA UPORZĄDKOWANA

zadanie 3 SORTOWANIE PRZEZ WSTAWIANIE

zadanie 3. sortowanie przez wstawianie pusta ręka bierzemy ze stołu kolejne karty i wstawiamy w odpowiednie miejsce opis wg Łukasza Jelenia: Zakładamy, że początkowa część tablicy jest już posortowana (na początku będzie to pierwszy element tablicy). Pierwszy element z drugiej (nieposortowanej) części tablicy przenoszony jest do zmiennej pomocniczej. Porównywana jest wartość tej zmiennej z kolejnymi elementami pierwszej (posortowanej) części tablicy (zaczynając od ostatniego). Dopóki elementy te są większe, to przesuwane są o jedna pozycje w prawo. Po zakończeniu przesuwania element ze zmiennej pomocniczej wstawiany jest w wolne miejsce. Procedura jest powtarzana dopóki pozostają jeszcze jakieś elementy w drugiej, nieuporządkowanej części tablicy. opis wikipedia: http://pl.wikipedia.org/wiki/sortowanie_przez_wstawianie ilustracja Romanian dance: https://www.youtube.com/watch?v=kpra0w1kecg

zadanie 3. sortowanie przez wstawianie schemat blokowy: j:=2 x:=a j wstaw x w posortowany ciąg: a 1,, a j-1 TAK j = n NIE j:=j+1

zadanie 3. sortowanie przez wstawianie pseudopascalokod: Początek j:=2; Dopóki j<=n wykonuj Początek x:=a[j]; i:=j-1; Dopóki i>0 a[i]>x wykonuj Początek a[i+1]:=a[i]; i:=i-1 Koniec; a[i+1]:=x; j:=j+1 Koniec; Koniec;

zadanie 3. sortowanie przez wstawianie przykład: TABLICA POCZĄTKOWA 9 5 2 1 1 przeglądanie 5 9 2 5 9 2 5 9 1 2 5 9 TABLICA UPORZĄDKOWANA

zadanie 4 SORTOWANIE SHELLA

zadanie 4. sortowanie metodą malejących przyrostów czyli Shella uporządkować elementy oddalone o n potem o n/2 - - w końcu sąsiednie opis wg Łukasza Jelenia: Sortowana tablica dzielona jest na kilka podtablic utworzonych z elementów oddalonych o ustalona liczbę pozycji. Tablice te są oddzielnie sortowane (zwykle metoda sortowania przez wstawianie lub bąbelkowego algorytmy te dobrze sprawdzają się dla danych częściowo posortowanych). W kolejnych krokach wykonywane są podziały z coraz mniejszym odstępem (dające coraz mniejsza liczbę podtablic) aż do uzyskania tylko jednej tablicy. Kluczowym problemem jest dobór odpowiedniej sekwencji odstępów przy podziałach tablicy (można użyć zasady zaproponowanej przez D. Knutha). opis wikipedia: http://pl.wikipedia.org/wiki/sortowanie_shella ilustracja Hungarian dance: https://www.youtube.com/watch?v=cmpaze8mx0

zadanie 4. sortowanie Shella pseudopascalokod: Początek zamiana:=fałsz; delta:=n; Dopóki (zamiana) wykonuj Początek Jeśli delta>=1 to Początek delta:=delta div 2; Powtarzaj zamiana:=fałsz; i:=1; Dopóki i<=n-delta wykonuj Początek Jeśli a[i]>a[i+delta] to Początek bufor:=a[i+delta]; a[i+delta]:=a[i]; a[i]:=bufor; zamiana:=prawda Koniec; { Jeśli a[i]>a[i+delta] } i:=i+1 Koniec { Dopóki i<=n-delta } Aż do zamiana= Fałsz Koniec { Jeśli delta >=1 } W przeciwnym razie zamiana = Prawda Koniec { Dopóki nie zamiana } Koniec

zadanie 4. sortowanie Shella przykład: tablica początkowa: elementy oddalone o 4: TABLICA POCZĄTKOWA 1 3 8 4 2 6 5 Porównujemy i przestawiamy elementy oddalone o 4 1 3 8 4 2 6 5 1 3 8 4 2 6 5 1 6 8 4 2 3 5 2 6 8 4 1 3 5

zadanie 4. sortowanie Shella przykład: elementy oddalone o 2: (pierwszy przebieg) 5 3 1 4 8 6 2 Sortowanie co dwa 1 3 5 4 8 6 2 1 3 5 4 8 6 2 1 3 5 4 8 6 2 1 3 5 4 8 6 2 1 3 5 4 2 6 8

zadanie 4. sortowanie Shella przykład: elementy oddalone o 2: (drugi przebieg) 1 3 5 4 2 6 8 Sortowanie co dwa 1 3 5 4 2 6 8 1 3 5 4 2 6 8 1 3 2 4 5 6 8 1 3 2 4 5 6 8 1 3 2 4 5 6 8

zadanie 4. sortowanie Shella przykład: elementy oddalone o 1: 1 3 2 4 5 6 8 Sortowanie co jeden 1 3 2 4 5 6 8 1 2 3 4 5 6 8 1 2 3 4 5 6 8 1 2 3 4 5 6 8 1 2 3 4 5 6 8 1 2 3 4 5 6 8 1 2 3 4 5 6 8 TABLICA UPORZĄDKOWANA

zadanie 5 SORTOWANIE PRZEZ SCALANIE

zadanie 5. sortowanie przez scalanie dziel i zwyciężaj dziel ciąg na dwa podciągi zwyciężaj posortuj te dwa podciągi łącz posortowane podciągi jeden posortowany opis wg Łukasza Jelenia: Sortowana tablica dzielona jest rekurencyjnie na dwie podtablice aż do uzyskania tablic jednoelementowych. Następnie podtablice te są scalane w odpowiedni sposób, dający w rezultacie tablice posortowaną. Wykorzystana jest tu metoda podziału problemu na mniejsze, łatwiejsze do rozwiązania zadania ( dziel i rządz ). opis wikipedia: http://pl.wikipedia.org/wiki/sortowanie_przez_scalanie ilustracja German dance: https://www.youtube.com/watch?v=xaqr3g_nvoo

zadanie 5. sortowanie przez scalanie schemat blokowy: P WE n, a 1,, a n NIE n > 1 TAK Podzielić ciąg a na dwa podciągi a1 i a2 jednakowej długości (z dokładnością do 1) Zastosować tą samą metodę sortowania do ciągu a1 Zastosować tą samą metodę sortowania do ciągu a2 Scalić uporządkowane już ciągi a1 i a2 w nowy, uporządkowany ciąg a WY a 1,, a n K

zadanie 5. sortowanie przez scalanie pseudopascalokod: Procedura SORTUJ; Początek Podziel ciąg na dwa podciągi; Jeśli lewy podciąg zawiera więcej niż jeden element to Wywołaj rekurencyjnie procedurę SORTUJ; Jeśli prawy podciąg zawiera więcej niż jeden element to Wywołaj rekurencyjnie procedurę SORTUJ; Scal dwa posortowane podciągi Koniec

zadanie 5. sortowanie przez scalanie przykład: TABLICA POCZĄTKOWA 2-1 4 10 3 0 dziel 2-1 4 10 3 0 dziel dziel 2-1 4 10 3 0 dziel dziel 2-1 10 3 scalaj scalaj -1 2 3 10 scalaj scalaj -1 2 4 0 3 10 scalaj -1 0 2 3 4 10 TABLICA UPORZĄDKOWANA

zadanie 6 SORTOWANIE SZYBKIE

zadanie 6. sortowanie szybkie dziel i zwyciężaj dziel tablica A l,, A p jest dzielona (tzn. elementy tej tablicy są przestawiane) na dwie niepuste części A l,, A j oraz A i,, A p takie, że każdy element A l,, A j jest nie większy niż każdy element A i,, A p, indeks rozdzielający wyznaczany jest za pomocą zmiennej T zwyciężaj dwie części tablicy A l,, A j oraz A i,, A p są sortowane za pomocą rekurencyjnych wywołań procedury SORTUJ łącz ponieważ części tablicy są sortowane w miejscu, nie trzeba nic robić, aby je połączyć: cała tablica A l,, A p jest posortowana

zadanie 6. sortowanie szybkie dziel i zwyciężaj opis wg Łukasza Jelenia: Na początku wybierany jest tzw. element osiowy. Następnie tablica dzielona jest na dwie podtablice. Pierwsza z nich zawiera elementy mniejsze od elementu osiowego, druga elementy większe lub równe, element osiowy znajdzie się miedzy nimi. Proces dzielenia powtarzany jest aż do uzyskania tablic jednoelementowych, nie wymagających sortowania. Właściwe sortowanie jest tu jakby ukryte w procesie przygotowania do sortowania. Wybór elementu osiowego wpływa na równomierność podziału na podtablice (najprostszy wariant wybór pierwszego elementu tablicy nie sprawdza się w przypadku, gdy tablica jest już prawie uporzadkowana). opis wikipedia: http://pl.wikipedia.org/wiki/sortowanie_szybkie ilustracja Hungarian dance: https://www.youtube.com/watch?v=cmpaze8mx0

zadanie 6. sortowanie szybkie schemat blokowy: i:=l j:=p Algorytm opisany w postaci procedury SORTUJ (l, p) T := A (l+p) div 2 NIE T > A l TAK TAK T < A j NIE i:=i+1 j:=j-1 NIE i j TAK bufor:=a i A i :=A j A j :=bufor i:=i+1 j:=j-1 TAK i > j NIE NIE l > j TAK SORTUJ (l,j) wywołanie rekursywne procedury SORTUJ NIE i < p TAK SORTUJ (i,p) wywołanie rekursywne procedury SORTUJ

zadanie 6. sortowanie szybkie pseudopascalokod: Początek x:=pierwszy element; Powtarzaj Jeśli wskazywany element < x to przesuń go na lewo od x; Jeśli wskazywany element > x to przesuń go na prawo od x Aż do z lewej <= x i z prawej >= x; Jeśli na lewo są jakieś elementy to sortujemy je tą samą metodą; Jeśli na prawo są jakieś elementy to sortujemy je tą samą metodą Koniec

zadanie 6. sortowanie szybkie tablica początkowa: kolejne wywołania funkcji sortuj: tablica uporządkowana: