Laboratorium nr 7 Sortowanie

Podobne dokumenty
Laboratoria nr 1. Sortowanie

Laboratoria nr 1. Sortowanie

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

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

Sortowanie przez wstawianie Insertion Sort

Programowanie w VB Proste algorytmy sortowania

Analiza algorytmów zadania podstawowe

INFORMATYKA SORTOWANIE DANYCH.

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 )

Wstęp do programowania

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

Algorytm selekcji Hoare a. Łukasz Miemus

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Struktury Danych i Złożoność Obliczeniowa

Wykład 4. Sortowanie

Algorytmy sortujące i wyszukujące

Sortowanie. LABORKA Piotr Ciskowski

Algorytmy sortujące. Sortowanie bąbelkowe

Sortowanie bąbelkowe

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

Jeszcze o algorytmach

Sortowanie. Bartman Jacek Algorytmy i struktury

Algorytmy i złożoność obliczeniowa. Wojciech Horzelski

Sortowanie - wybrane algorytmy

Programowanie Proceduralne

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

Analiza algorytmów zadania podstawowe

Sortowanie przez wstawianie

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

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

PODSTAWY INFORMATYKI wykład 5.

Metodyki i Techniki Programowania 2

Sortowanie w czasie liniowym

Algorytmy i struktury danych

Algorytmy i struktury danych Matematyka III sem.

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

Algorytmy i Struktury Danych.

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

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

Sortowanie bąbelkowe - wersja nr 1 Bubble Sort

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

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

Strategia "dziel i zwyciężaj"

Algorytmy i Struktury Danych.

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima Uwagi przed sprawdzianem nr 1.

Wykład 2. Poprawność algorytmów

WYKŁAD 3 WYPEŁNIANIE OBSZARÓW. Plan wykładu: 1. Wypełnianie wieloboku

CO TO JEST ALGORYTM?

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

Podstawy Informatyki. Sprawność algorytmów

Zaawansowane algorytmy. Wojciech Horzelski

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Algorytmy i Struktury Danych

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

ALGORYTMY I STRUKTURY DANYCH

Listy, kolejki, stosy

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

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

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

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

Wykład 5. Sortowanie w czasie liniowologarytmicznym

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.

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

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

Podstawy Informatyki

Algorytmy i struktury danych

Programowanie i projektowanie obiektowe

1. Znajdowanie miejsca zerowego funkcji metodą bisekcji.

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

Dynamiczny przydział pamięci (język C) Dynamiczne struktury danych. Sortowanie. Klasyfikacja algorytmów sortowania. Algorytmy sortowania

Programowanie dynamiczne

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.

Zasady analizy algorytmów

Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott

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

Algorytmy i Struktury Danych.

Algorytmy przeszukiwania

Metoda bisekcji (inaczej połowienia przedziału lub równych podziałów)

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

Sortowanie Shella Shell Sort

Podstawowe struktury danych

liniowa - elementy następują jeden za drugim. Graficznie możemy przedstawić to tak:

PODSTAWY INFORMATYKI wykład 10.

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

Sortowanie przez scalanie

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

Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji.

Zapis algorytmów: schematy blokowe i pseudokod 1

Algorytmy Równoległe i Rozproszone Część II - Sieci porównujące

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

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

Wybrane algorytmy tablicowe

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

Luty 2001 Algorytmy (4) 2000/2001

Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP

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

Notacja RPN. 28 kwietnia wyliczanie i transformacja wyrażeń. Opis został przygotowany przez: Bogdana Kreczmera.

Zaawansowane algorytmy i struktury danych

Transkrypt:

Laboratorium nr 7 Sortowanie 1. Sortowanie bąbelkowe (BbS) 2. Sortowanie przez wstawianie (IS) 3. Sortowanie przez wybieranie (SS)

Materiały Wyróżniamy następujące metody sortowania: 1. Przez prostą zamianę bąbelkowe (Bubble Sort) BbS Sprawdzamy całą tablicę od dołu do góry (od prawej do lewej strony). Analizowane są zawsze dwa sąsiadujące ze sobą elementy. Jeżeli uporządkowane są one tak, że większy poprzedza mniejszy to zamieniane są one miejscami. Czynność powtarzana jest tak długo, aż podczas sprawdzania całej tablicy, nie zajdzie ani jedna zamiana elementów. W trakcie pierwszego przebiegu na pierwszą pozycję tablicy (indeks 0) przesuwa się element najlżejszy", w trakcie drugiego przebiegu drugi najlżejszy wędruje na drugą pozycję tablicy (indeks 1) i tak dalej, aż do posortowania tablicy. Strefa pracy algorytmu zmniejsza się zatem o 1 w kolejnym przejściu dużej pętli - analizowanie za każdym razem całej tablicy byłoby niepotrzebne. Algorytm nosi nazwę bąbelkowego przez analogię do pęcherzyków powietrza ulatujących w górę tuby wypełnionej wodą o ile postawioną pionowo tablicę potraktować jako pojemnik z wodą a liczby jako pęcherzyki powietrza. Najszybciej ulatują do góry bąbelki najlżejsze - liczby o najmniejszej wartości (przyjmując sortowanie w kierunku wartości niemalejących). Idea działania algorytmu, inaczej: Algorytm składa się z tzw. fal bąbli (powietrza). W każdej fali bierze się po kolei dwa sąsiednie elementy, tzn. 0 i 1, 1 i 2, 2 i 3,... i zamienia się je miejscami ( bąbel ), jeśli element o mniejszym indeksie ma większą wartość. Po każdej fali największy element zostaje przesunięty na koniec zbioru. Dlatego każda następna fala jest o jeden element krótsza. Jeśli w jakiejś fali nie wystąpił żaden bąbel to znaczy, że wszystkie elementy są uporządkowane od najmniejszego do największego. Kolejną falę przeprowadza się tylko wtedy kiedy w poprzedniej wystąpił bąbel" oraz nie wszystkie fale zostały wykonane (dla zbioru N-elementowego wykonuje się N-1 fal). Przed dojściem do elementu największego bąblowanie prowadzi do wstępnego porządkowania elementów mniejszych. Potem największy przesuwa się na koniec zbioru. Jeśli zbiór jest uporządkowany, to zostaje wykonana tylko jedna fala bąbli.

Poniżej znajduje się przykład dla nieuporządkowanego ciągu liczb <40, 2, 39, 6, 18, 4, 20>. Inny przykład dla ciągu liczb <4, 2, 5, 1, 7>. Kolejne przebiegi algorytmu: Tablica wejściowa A w poniższym pseudokodzie zawiera ciąg, który należy posortować. Po zakończeniu procedury tablica A zawiera posortowany ciąg wyjściowy. PSEUDOKOD Bubble-Sort (A) 1 for i 1 to length[a] 3 for j length[a] 1 to i 4 if A[j] A[j-1] 5 then do zamień A[j] A[j-1]

Algorytm wykonuje n przejść (fale), przy czym w każdej dokonuje n-1 porównań. Jego złożoność pesymistyczna to O(n 2 ). 2. Przez proste wstawianie (Insertion Sort) IS Algorytm ten działa w taki sposób w jaki ludzie często porządkują talię kart. Zaczynamy od pustej lewej ręki, po czym bierzemy ze stołu kolejne karty i wstawiamy je we właściwe miejsca w talii kart, trzymanej w lewej ręce. Aby znaleźć właściwe miejsce dla danej karty, porównujemy ją z kartami, które już mamy w ręce, przesuwając się od strony prawej do lewej. Opis słowny algorytmu: 1. Utwórz zbiór elementów posortowanych i przenieś do niego dowolny element ze zbioru nieposortowanego. 2. Weź dowolny element ze zbioru nieposortowanego: a. Wyciągnięty element porównujemy z kolejnymi elementami zbioru posortowanego póki nie napotkamy 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. b. Wyciągnięty element wstaw w miejsce gdzie zakończono porównywanie. 3. Jeśli zbiór elementów nieuporządkowanych jest niepusty wróć do punkt 2 (pobieranie elementu nieposortowanego). Na poniższym rysunku widać działanie algorytmu dla tablicy A=<5, 2, 4, 6, 1, 3>. Indeks j wskazuje kartę bieżącą, która jest właśnie wstawiana do talii kart w ręce. Elementy tablicy A[1...j-1] reprezentują karty trzymane w ręce, a elementy A[j+1..n] odpowiadają stosowi kart na stole. Indeks j przesuwa się od strony lewej do prawej. W każdej iteracji zewnętrznej pętli for element A[j] jest pobierany z tablicy (wiersz 2 w pseudokodzie). Następnie, począwszy od pozycji j-1, elementy są sukcesywnie przesuwane o jedną pozycję w prawo, aż zostanie znaleziona właściwa pozycja dla A[j] (wiersze 4-7 w pseudokodzie) i wtedy element ten zostaje tam wstawiony (wiersz 8 w pseudokodzie).

Inny przykład: Tablica wejściowa A w poniższym pseudokodzie zawiera ciąg, który należy posortować. Po zakończeniu procedury tablica A zawiera posortowany ciąg wyjściowy. PSEUDOKOD Insertion-Sort (A) 1 for i 1 to length[a] 2 do key A[j] 3 do wstaw A[j] w posortowany ciąg A[1...j-1]

4 i j 1 5 while i>0 i A[i] key 6 do A[i+1] A[i] 7 i i 1 8 A[i+1] key Jego złożoność pesymistyczna to O(n 2 ). 3. Przez proste wybieranie/wymianę (Selection Sort) SS Na początku szukany jest najmniejszy element. Po jego znalezieniu jest on zamieniany z pierwszym elementem tablicy. Następnie szukany jest ponownie najmniejszy element, ale począwszy od elementu drugiego (pierwszy najmniejszy jest już wstawiony na odpowiednie miejsce). Po jego znalezieniu jest on zamieniany z drugim elementem. Czynność ta jest powtarzana kolejno na elementach od trzeciego, czwartego, itd., aż do n-tego. Poniżej znajduje się przykład zastosowania dla nieuporządkowanego ciągu liczb <2, 4, 1, 3>.

Literatura: Thomas H. Cormen, Charles E. Leiserson, Ronald L.Rivest Wprowadzenie do algorytmów Wydanie czwarte, Wydawnictwo Naukowo-Techniczne, Warszawa, 2001 N. Wirth Algorytmy + struktury danych = programy Wydawnictwo Naukowo-Techniczne, Warszawa, 2004 http://edu.pjwstk.edu.pl/wyklady/asd/scb/index00.html http://edu.i-lo.tarnow.pl/inf/alg/003_sort/index.php http://pl.wikipedia.org/wiki/sortowanie