Algorytmy sortujące. Sortowanie bąbelkowe

Podobne dokumenty
Sortowanie bąbelkowe - wersja nr 1 Bubble Sort

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

Sortowanie - wybrane algorytmy

Sortowanie Shella Shell Sort

Laboratorium nr 7 Sortowanie

Sortowanie przez wstawianie Insertion Sort

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

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 )

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

B.B. 2. Sumowanie rozpoczynamy od ostatniej kolumny. Sumujemy cyfry w kolumnie zgodnie z podaną tabelką zapisując wynik pod kreską:

Programowanie w VB Proste algorytmy sortowania

Zaliczenie. Egzamin. lub. Wykład. Zaliczenie. Ćwiczenie. 3 zadania. Projekty. Ocena. Na ocenę

Analiza algorytmów zadania podstawowe

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Sortowanie. Bartman Jacek Algorytmy i struktury

Matematyczne Podstawy Informatyki

PODSTAWY INFORMATYKI wykład 5.

Wstęp do programowania

Algorytmy przeszukiwania

Metodyki i Techniki Programowania 2

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

KARTA KURSU. Algorytmy, struktury danych i techniki programowania. Algorithms, Data Structures and Programming Techniques

Sortowanie przez wstawianie

Sortowanie. LABORKA Piotr Ciskowski

INFORMATYKA SORTOWANIE DANYCH.

Sprawozdanie do zadania numer 2

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.

Kierunek i poziom studiów: Matematyka, studia I stopnia (licencjackie), rok I

Struktury Danych i Złożoność Obliczeniowa

Algorytmy przeszukiwania wzorca

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

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

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

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

Algorytmy sortujące i wyszukujące

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

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

Jeszcze o algorytmach

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

Kierunek i poziom studiów: Matematyka, studia I stopnia (licencjackie), rok I

Analiza algorytmów zadania podstawowe

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

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

Strategia "dziel i zwyciężaj"

Listy, kolejki, stosy

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Zadanie 1. Zmiana systemów. Zadanie 2. Szyfr Cezara. Zadanie 3. Czy liczba jest doskonała. Zadanie 4. Rozkład liczby na czynniki pierwsze Zadanie 5.

Sortowanie zewnętrzne

Algorytmy i struktury danych

Matematyka dyskretna Literatura Podstawowa: 1. K.A. Ross, C.R.B. Wright: Matematyka Dyskretna, PWN, 1996 (2006) 2. J. Jaworski, Z. Palka, J.

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

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

Drzewa poszukiwań binarnych

Algorytmy i Struktury Danych.

Podstawy Informatyki. Sprawność algorytmów

Przykładowe sprawozdanie. Jan Pustelnik

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

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

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

Algorytmy i struktury danych

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

Informatyka I stopień (I stopień / II stopień) ogólnoakademicki (ogólno akademicki / praktyczny)

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

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

Operacje arytmetyczne w systemie dwójkowym

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

Algorytmy i Struktury Danych.

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

Metodyki i techniki programowania

Wykład 1 Wprowadzenie do algorytmów. Zawartość wykładu 1. Wstęp do algorytmów i struktur danych 2. Algorytmy z rozgałęzieniami.

Grafy i sieci w informatyce - opis przedmiotu

Wykład 4. Sortowanie

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

Temat: Algorytmy zachłanne

Metody Optymalizacji: Przeszukiwanie z listą tabu

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

Algorytmy sortujące 1

Algorytmy zachłanne. dr inż. Urszula Gałązka

Temat 8. Zrobić to szybciej Sieci sortujące

Algorytm i złożoność obliczeniowa algorytmu

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Metodyki i techniki programowania

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.

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP

Podstawy Informatyki

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

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

Operacje arytmetyczne

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

Algorytm. Krótka historia algorytmów

Kolokwium ze wstępu do informatyki, I rok Mat. (Ściśle tajne przed godz. 10 : grudnia 2005.)

Algorytmy i Struktury Danych

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

Przetwarzanie danych Tworzenie programów

Algorytmy i struktury danych Matematyka III sem.

Informatyka 1. Złożoność obliczeniowa

Zał nr 4 do ZW. Dla grupy kursów zaznaczyć kurs końcowy. Liczba punktów ECTS charakterze praktycznym (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 Równoległe i Rozproszone Część II - Sieci porównujące

Zaawansowane algorytmy i struktury danych

Transkrypt:

Algorytmy sortujące Sortowanie bąbelkowe

Sortowanie bąbelkowe - wstęp Algorytm sortowania bąbelkowego jest jednym z najstarszych algorytmów sortujących. Zasada działania opiera się na cyklicznym porównywaniu par sąsiadujących elementów i zamianie ich kolejności w przypadku niespełnienia kryterium porządkowego zbioru. Operację tę wykonujemy dotąd, aż cały zbiór zostanie posortowany. Sortowanie w tego typu algorytmie odbywa się w miejscu.

Sortowanie bąbelkowe - przykład Jako przykład działania algorytmu sortowania bąbelkowego posortujemy przy jego pomocy pięcioelementowy zbiór liczb [6 5 4 3 2], który wstępnie jest posortowany w kierunku odwrotnym, co możemy uznać za przypadek najbardziej niekorzystny, ponieważ wymaga przestawienia wszystkich elementów. 6 5 4 3 2 Rozpoczynamy od pierwszej pary, która wymaga wymiany elementów 5 6 4 3 2 Druga para też wymaga zamiany elementów 1 5 4 6 3 2 Wymagana wymiana elementów 5 4 3 6 2 Ostatnia para również wymaga wymiany elementów 5 4 3 2 6 Stan po pierwszym obiegu. Zwróć uwagę, iż najstarszy element (6) znalazł się na końcu zbioru, a najmłodszy (2) przesunął się o jedną pozycję w lewo.

Sortowanie bąbelkowe przykład c.d. 5 4 3 2 6 Para wymaga wymiany 4 5 3 2 6 Para wymaga wymiany 4 3 5 2 6 Para wymaga wymiany 2 4 3 2 5 6 4 3 2 5 6 Elementy są w dobrej kolejności, zamiana nie jest konieczna. Stan po drugim obiegu. Zwróć uwagę, iż najmniejszy element (2) znów przesunął się o jedną pozycję w lewo. Z obserwacji tych można wywnioskować, iż po każdym obiegu najmniejszy element wędruje o jedną pozycję ku początkowi zbioru. Najstarszy element zajmuje natomiast swe miejsce końcowe.

Sortowanie bąbelkowe przykład c.d. 4 3 2 5 6 Para wymaga wymiany 3 4 3 4 2 5 6 Para wymaga wymiany 3 2 4 5 6 Dobra kolejność 3 2 4 5 6 Dobra kolejność 3 2 4 5 6 Stan po trzecim obiegu. Wnioski te same. 3 2 4 5 6 Para wymaga wymiany 2 3 4 5 6 Dobra kolejność 2 3 4 5 6 Dobra kolejność 2 3 4 5 6 Dobra kolejność 2 3 4 5 6 Zbiór jest posortowany. Koniec

Sortowanie bąbelkowe wnioski Posortowanie przedstawionego zbioru wymaga 4 obiegów. Wynika to z tego, że w przypadku najbardziej niekorzystnym najmniejszy element znajduje się na samym końcu zbioru wejściowego. Każdy obieg przesuwa go o jedną pozycję w kierunku początku zbioru. Takich przesunięć należy wykonać n-1 (n - ilość elementów w zbiorze). Uwaga! Algorytm sortowania bąbelkowego jest uważany za bardzo zły algorytm sortujący. Można go stosować tylko dla niewielkiej liczby elementów w sortowanym zbiorze (do około 5000). Przy większych zbiorach czas sortowania może być zbyt długi.

Optymalizacja algorytmu Przedstawiony algorytm sortowania bąbelkowego można zoptymalizować (ulepszyć) pod względem czasu wykonania. Po przeanalizowaniu obiegów wykonywanych w tym algorytmie, zauważamy, iż po wykonaniu pełnego obiegu w algorytmie sortowania bąbelkowego najstarszy element wyznaczony przez przyjęty porządek zostaje umieszczony na swoim właściwym miejscu - na końcu zbioru. Wynika z tego, że w każdej kolejnej parze porównywanych elementów element starszy przechodzi na drugą pozycję. W kolejnej parze jest on na pierwszej pozycji, a skoro jest najstarszym, to po porównaniu znów przejdzie na pozycję drugą itd. - jest jakby ciągnięty na koniec zbioru (jak bąbelek powietrza wypływający na powierzchnię wody).

Optymalizacja algorytmu - przykład Wykonamy jeden obieg sortujący dla zbioru pięcioelementowego [ 9 4 2 7 0 ]. Elementem najstarszym jest pierwszy element - liczba 9. 9 4 2 7 0 4 9 2 7 0 Para wymaga przestawienia elementów. Element najstarszy przejdzie na drugą pozycję w parze. Konieczne przestawienie elementów. Element najstarszy znów trafi na pozycję drugą w parze. 1 4 2 9 7 0 Konieczne przestawienie elementów. 4 2 7 9 0 4 2 7 0 9 Ostatnia para również wymaga przestawienia elementów. Koniec obiegu. Najstarszy element znalazł się na końcu zbioru. Po każdym obiegu na końcu zbioru tworzy się podzbiór uporządkowanych najstarszych elementów. Zatem w kolejnych obiegach możemy pomijać sprawdzanie ostatnich elementów - liczebność zbioru do posortowania z każdym obiegiem maleje o 1.

Optymalizacja algorytmu przykład c.d. Dokończmy sortowania zbioru uwzględniając powyższe spostrzeżenia. Po pierwszym obiegu na końcu zbioru jest umieszczony element najstarszy. W drugim obiegu sortujemy zbiór 4 elementowy, w trzecim obiegu 3 elementowy i w obiegu ostatnim, czwartym - zbiór 2 elementowy. 4 2 7 0 9 Para wymaga przestawienia elementów. 2 2 4 7 0 9 Dobra kolejność 2 4 7 0 9 Konieczne przestawienie elementów. 2 4 0 7 9 Koniec obiegu. Na końcu zbioru mamy 2 elementy uporządkowane.

Optymalizacja algorytmu przykład c.d. 2 4 0 7 9 Dobra kolejność 3 2 4 0 7 9 Para wymaga przestawienia elementów 2 0 4 7 9 Koniec obiegu. Na końcu zbioru mamy 3 elementy uporządkowane 4 2 0 4 7 9 Konieczne przestawienie elementów. 0 2 4 7 9 Koniec ostatniego obiegu - zbiór jest posortowany. Porównując otrzymany wynik, do tabelki z Przykładu 1, nawet wzrokowo zauważamy istotne zmniejszenie ilości niezbędnych operacji do uzyskania tego samego efektu.

Optymalizacja algorytmu wnioski Z przedstawionych schematów wynika, iż ilość obiegów pętli wewnętrznej wynosi: Otrzymane wyrażenie nie jest jeszcze doskonałe (dla zainteresowanych: wciąż ma kwadratową klasę złożoności obliczeniowej). Osiągnęliśmy jednak większą efektywność działania dzięki wprowadzonym zmianom w porównaniu do poprzedniego przykładu. Oczywiście możliwa jest jeszcze dalsza optymalizacja algorytmu.

Dalsza optymalizacja algorytmu Algorytm sortowania bąbelkowego wykonuje dwa rodzaje operacji: - test bez zamiany miejsc elementów operacja ta nie sortuje zbioru, jest więc operacją pustą - test ze zamianą miejsc elementów - operacja dokonuje faktycznej zmiany porządku elementów, jest zatem operacją sortującą Ze względu na przyjęty sposób sortowania algorytm bąbelkowy zawsze musi wykonać tyle samo operacji sortujących. Tego nie możemy zmienić. Jednakże możemy wpłynąć na eliminację operacji pustych. W ten sposób usprawnimy działanie algorytmu. Po dokładnym przeanalizowaniu przykładu 1 i 2 można dokonać następujących spostrzeżeń: - przykład 1 jest najmniej optymalną wersją algorytmu bąbelkowego. Wykonywane są wszystkie możliwe operacje sortujące i puste. - przykład 2 redukuje ilość operacji pustych poprzez ograniczanie liczby obiegów pętli wewnętrznej (sortującej). Możliwa jest dalsza redukcja operacji pustych, jeśli sprawdzimy, czy w pętli wewnętrznej były przestawiane elementy (czyli czy wykonano operacje sortujące). Jeśli nie, to zbiór jest już posortowany i możemy zakończyć pracę algorytmu.

Optymalizacja algorytmu przykład c.d. Posortujmy zbiór [ 4 1 0 8 9 ] zgodnie z wprowadzoną modyfikacją. 4 1 0 8 9 Para wymaga przestawienia elementów. 1 4 0 8 9 Konieczne przestawienie elementów. 1 1 0 4 8 9 Elementy w dobrej kolejności 1 0 4 8 9 Elementy w dobrej kolejności 1 0 4 8 9 Koniec pierwszego obiegu. Ponieważ były przestawienia elementów, sortowanie kontynuujemy

Optymalizacja algorytmu przykład c.d. 1 0 4 8 9 Para wymaga przestawienia elementów 2 0 1 4 8 9 Elementy w dobrej kolejności 0 1 4 8 9 Elementy w dobrej kolejności 0 1 4 8 9 Koniec drugiego obiegu. Było przestawienie elementów, zatem sortowanie kontynuujemy 0 1 4 8 9 Elementy w dobrej kolejności 3 0 1 4 8 9 Elementy w dobrej kolejności 0 1 4 8 9 Koniec trzeciego obiegu. Nie było przestawień elementów, kończymy sortowanie. Wykonaliśmy o 1 obieg sortujący mniej.

Bibliografia - Sysło M, Algorytmy WSiP, Warszawa 1997 - John L Casti: Five golden rules: great theories of 20 th -century mathematics and why they matter. New York: Wiley-Interscience, 1996 - Donald E. Knuth: Sztuka programowania. T. 1. Warszawa: Wydawnictwo Naukowo-Techniczne, 2002 - Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein: Wprowadzenie do algorytmów;wnt, wyd. VI 2004 - www.pl.wikipedia.org/ - www.algorytm.org/ - www.neuralnets.eu/ - www.wazniak.mimuw.edu.pl/ - www.computerchess.us/gtchess - www.encyklopedia.pwn.pl/