Algorytmy i Struktury Danych.

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

Programowanie Proceduralne

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych.

Podstawy Informatyki

Podstawy Informatyki. Sprawność algorytmów

Sortowanie - wybrane algorytmy

Analiza algorytmów zadania podstawowe

Algorytmy i Struktury Danych.

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

INFORMATYKA SORTOWANIE DANYCH.

Wprowadzenie do złożoności obliczeniowej

Laboratorium nr 7 Sortowanie

Algorytmy i Struktury Danych.

Matematyczne Podstawy Informatyki

Wykład 2. Poprawność algorytmów

Analiza algorytmów zadania podstawowe

TEORETYCZNE PODSTAWY INFORMATYKI

Zasady analizy algorytmów

Algorytmy i Struktury Danych

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

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 )

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

Algorytm selekcji Hoare a. Łukasz Miemus

Programowanie w VB Proste algorytmy sortowania

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

TEORETYCZNE PODSTAWY INFORMATYKI

Załącznik KARTA PRZEDMIOTU. KARTA PRZEDMIOTU Wydział Automatyki, Elektroniki i Informatyki, Rok akademicki: 2009/2010

PODSTAWY INFORMATYKI wykład 5.

Sortowanie przez wstawianie

Algorytmy i Struktury Danych.

Zaawansowane algorytmy. Wojciech Horzelski

Algorytmy i Struktury Danych

Zaawansowane algorytmy i struktury danych

Sortowanie przez scalanie

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

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

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Algorytmy i struktury danych.

Algorytmy i struktury danych Matematyka III sem.

Algorytmy i Struktury Danych.

Sortowanie w czasie liniowym

Wykład 5. Sortowanie w czasie liniowologarytmicznym

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

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA Realizacja w roku akademickim 2016/17

Złożoność Obliczeniowa Algorytmów

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

Literatura. 1) Pojęcia: złożoność czasowa, rząd funkcji. Aby wyznaczyć pesymistyczną złożoność czasową algorytmu należy:

Podstawy programowania. Przykłady algorytmów Cz. 2 Sortowanie

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

PRZEWODNIK PO PRZEDMIOCIE

Sortowanie bąbelkowe

Wstęp do programowania

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

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP

Algorytmy i struktury danych

KARTA MODUŁU KSZTAŁCENIA

koordynator modułu dr hab. Michał Baczyński rok akademicki 2012/2013

KARTA PRZEDMIOTU. 1. Informacje ogólne. 2. Ogólna charakterystyka przedmiotu. Algorytmy i struktury danych, C3

Strategia "dziel i zwyciężaj"

Efektywność algorytmów

Wykład 4. Sortowanie

KARTA PRZEDMIOTU. Algorytmy i struktury danych, C4

ALGORYTMY I STRUKTURY DANYCH

Sylabus modułu: Matematyczne podstawy informatyki (kod modułu:03-mo2n-12-mpln)

Teoretyczne podstawy informatyki

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

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

WSTĘP DO INFORMATYKI. Złożoność obliczeniowa, efektywność i algorytmy sortowania

Złożoność algorytmów. Wstęp do Informatyki

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

Struktury Danych i Złożoność Obliczeniowa

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p.

Informatyka 1. Złożoność obliczeniowa

PODSTAWY INFORMATYKI wykład 10.

3. Podaj elementy składowe jakie powinna uwzględniać definicja informatyki.

Zał nr 4 do ZW. Dla grupy kursów zaznaczyć kurs końcowy. Liczba punktów ECTS charakterze praktycznym (P)

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

Podyplomowe Studium Informatyki

Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2015/2016. Forma studiów: Stacjonarne Kod kierunku: 11.

Teoria obliczeń i złożoność obliczeniowa

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1.

Drzewa poszukiwań binarnych

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Podstawy Programowania. Złożoność obliczeniowa

Teoretyczne podstawy informatyki

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

Algorytmy i Struktury Danych.

Kierunek: Informatyka. Przedmiot:

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

Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott

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

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

Wstęp do programowania

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

Podyplomowe Studium Programowania i Systemów Baz Danych

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

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

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

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

Transkrypt:

Algorytmy i Struktury Danych. Organizacja wykładu. Problem Sortowania. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 1 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 1 / 35

Na całym cyklu wykładów z Algorytmów i Struktur Danych wykorzystano materiały dostępne z następujacych witryn: http://wazniak.mimuw.edu.pl/ http://ocw.mit.edu/courses/ Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 2 / 35

Literatura podstawowa Cormen T.H., Leiserson Ch.E., Rivest R.L. Wprowadzenie do algorytmów. WNT, Warszawa, 1997. Dasgupta S., Papadimitriou Ch., Vasirani U. Algorytmy. Wydawnictwo Naukowe PWN, Seria Fundamenta Informatyki, Warszawa 2010. Banachowski L., Diks K., Rytter W. Algorytmy i struktury danych. WNT, Warszawa, 1996. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 3 / 35

Literatura uzupełniajaca Drozdek A. C++. Algorytmy i struktury danych. Wydawnictwo Helion. Gliwice, 2004. Sedgewick R. Algorytmy w C++. Wydawnictwo RM. Warszawa, 1999. Sedgewick R. Algorytmy w C++. Grafy. Wydawnictwo RM. Warszawa, 2003. Piotr Wróblewski. Algorytmy, struktury danych i techniki programowania. Wydanie III. Wydawnictwo Helion. Gliwice, 2003. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 4 / 35

Cel wykładów z algortmów i struktur danych Wykład jest poświęcony przede wszystkim metodom efektywnego rozwiazywania problemów na komputerze. Jego celem jest zapoznanie z: podstawami analizy algorytmów dobór właściwego algorytmu i struktury danych jest podstawa sukcesu przy rozwiazywaniu zadanego problemu. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 5 / 35

Cel wykładów z algortmów i struktur danych Wykład jest poświęcony przede wszystkim metodom efektywnego rozwiazywania problemów na komputerze. Jego celem jest zapoznanie z: podstawami analizy algorytmów dobór właściwego algorytmu i struktury danych jest podstawa sukcesu przy rozwiazywaniu zadanego problemu. technikami projektowania algorytmów: dziel i rzadź, programowanie dynamiczne, algorytmy zachłanne, przeszukiwanie z nawrotami, heurystyki. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 5 / 35

Cel wykładów z algortmów i struktur danych Wykład jest poświęcony przede wszystkim metodom efektywnego rozwiazywania problemów na komputerze. Jego celem jest zapoznanie z: podstawami analizy algorytmów dobór właściwego algorytmu i struktury danych jest podstawa sukcesu przy rozwiazywaniu zadanego problemu. technikami projektowania algorytmów: dziel i rzadź, programowanie dynamiczne, algorytmy zachłanne, przeszukiwanie z nawrotami, heurystyki. zestawem algorytmów realizujacych zadania typu wyszukiwanie, sortowanie. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 5 / 35

Cel wykładów z algortmów i struktur danych Wykład jest poświęcony przede wszystkim metodom efektywnego rozwiazywania problemów na komputerze. Jego celem jest zapoznanie z: podstawami analizy algorytmów dobór właściwego algorytmu i struktury danych jest podstawa sukcesu przy rozwiazywaniu zadanego problemu. technikami projektowania algorytmów: dziel i rzadź, programowanie dynamiczne, algorytmy zachłanne, przeszukiwanie z nawrotami, heurystyki. zestawem algorytmów realizujacych zadania typu wyszukiwanie, sortowanie. z abstrakcyjnymi strukturami danych i ich implementacjami: stosy, kolejki, listy, drzewa, drzewa poszukiwań binarnych, grafy, kolejki priorytetowe. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 5 / 35

Cel wykładów z algortmów i struktur danych Wykład jest poświęcony przede wszystkim metodom efektywnego rozwiazywania problemów na komputerze. Jego celem jest zapoznanie z: podstawami analizy algorytmów dobór właściwego algorytmu i struktury danych jest podstawa sukcesu przy rozwiazywaniu zadanego problemu. technikami projektowania algorytmów: dziel i rzadź, programowanie dynamiczne, algorytmy zachłanne, przeszukiwanie z nawrotami, heurystyki. zestawem algorytmów realizujacych zadania typu wyszukiwanie, sortowanie. z abstrakcyjnymi strukturami danych i ich implementacjami: stosy, kolejki, listy, drzewa, drzewa poszukiwań binarnych, grafy, kolejki priorytetowe. podstawowymi algorytmami grafowymi. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 5 / 35

Cel wykładów z algortmów i struktur danych Wykład jest poświęcony przede wszystkim metodom efektywnego rozwiazywania problemów na komputerze. Jego celem jest zapoznanie z: podstawami analizy algorytmów dobór właściwego algorytmu i struktury danych jest podstawa sukcesu przy rozwiazywaniu zadanego problemu. technikami projektowania algorytmów: dziel i rzadź, programowanie dynamiczne, algorytmy zachłanne, przeszukiwanie z nawrotami, heurystyki. zestawem algorytmów realizujacych zadania typu wyszukiwanie, sortowanie. z abstrakcyjnymi strukturami danych i ich implementacjami: stosy, kolejki, listy, drzewa, drzewa poszukiwań binarnych, grafy, kolejki priorytetowe. podstawowymi algorytmami grafowymi. problemami obliczeniowo trudnymi: NP-zupełność, nierozstrzygalność. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 5 / 35

Dlaczego warto poznać algorytmy i ich złożoność obliczeniowa? Algorytmy pozwalaja na pisanie dobrych programów, tzn. programów, które działaja poprawnie i wydajne, sa funkcjonalne, zużywaja tylko konieczna liczbę zasobów, itp. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 6 / 35

Dlaczego warto poznać algorytmy i ich złożoność obliczeniowa? Algorytmy pozwalaja na pisanie dobrych programów, tzn. programów, które działaja poprawnie i wydajne, sa funkcjonalne, zużywaja tylko konieczna liczbę zasobów, itp. Algorytmy pozwalaja w sposób formalny mówić o zachowaniu programów implementowanych w różnych językach programowania. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 6 / 35

Dlaczego warto poznać algorytmy i ich złożoność obliczeniowa? Algorytmy pozwalaja na pisanie dobrych programów, tzn. programów, które działaja poprawnie i wydajne, sa funkcjonalne, zużywaja tylko konieczna liczbę zasobów, itp. Algorytmy pozwalaja w sposób formalny mówić o zachowaniu programów implementowanych w różnych językach programowania. Najważniejszymi aspektami algorytmu sa jego poprawność i złożoność obliczeniowa. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 6 / 35

Dlaczego warto poznać algorytmy i ich złożoność obliczeniowa? Algorytmy pozwalaja na pisanie dobrych programów, tzn. programów, które działaja poprawnie i wydajne, sa funkcjonalne, zużywaja tylko konieczna liczbę zasobów, itp. Algorytmy pozwalaja w sposób formalny mówić o zachowaniu programów implementowanych w różnych językach programowania. Najważniejszymi aspektami algorytmu sa jego poprawność i złożoność obliczeniowa. Złożoność obliczeniowa algorytmu wyznacza granice pomiędzy tym co jest możliwe do wykonania/ zaimplementowania/ zastosowania w rzeczywistości, a co nie. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 6 / 35

Dlaczego warto poznać algorytmy i ich złożoność obliczeniowa? Algorytmy pozwalaja na pisanie dobrych programów, tzn. programów, które działaja poprawnie i wydajne, sa funkcjonalne, zużywaja tylko konieczna liczbę zasobów, itp. Algorytmy pozwalaja w sposób formalny mówić o zachowaniu programów implementowanych w różnych językach programowania. Najważniejszymi aspektami algorytmu sa jego poprawność i złożoność obliczeniowa. Złożoność obliczeniowa algorytmu wyznacza granice pomiędzy tym co jest możliwe do wykonania/ zaimplementowania/ zastosowania w rzeczywistości, a co nie. Złożoność obliczeniowa algorytmu to koszt jego realizacji. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 6 / 35

Złożoność algorytmu Definicja Złożoność algorytmu to ilość zasobów komputera niezbędnych do jego wykonania. W zależności od rozważanego zasobu złożoność dzielimy na złożoność czasową oraz złożoność pamięciowa. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 7 / 35

Złożoność algorytmu Definicja Złożoność algorytmu to ilość zasobów komputera niezbędnych do jego wykonania. W zależności od rozważanego zasobu złożoność dzielimy na złożoność czasową oraz złożoność pamięciowa. Złożoność czasowa to zależność pomiędzy rozmiarem danych wejściowych a liczba operacji elementarnych (operacji dominujacych) wykonywanych w trakcie przebiegu algorytmu. Operacjami dominujacymi moga być na przykład: podstawienie, porównanie lub prosta operacja arytmetyczna. Dzięki rozważaniu operacji dominujacych analiza złożoności będzie zależna jedynie od algorytmu, a nie od jego implementacji i sprzętu. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 7 / 35

Złożoność algorytmu Złożoność pamięciowa to zależność pomiędzy rozmiarem danych wejściowych a ilośca wykorzystanej pamięci. Jako tę ilość najczęściej przyjmuje się użyta pamięć maszyny abstrakcyjnej (na przykład liczbę komórek pamięci maszyny RAM) w funkcji rozmiaru wejścia. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 8 / 35

Złożoność algorytmu Złożoność pamięciowa to zależność pomiędzy rozmiarem danych wejściowych a ilośca wykorzystanej pamięci. Jako tę ilość najczęściej przyjmuje się użyta pamięć maszyny abstrakcyjnej (na przykład liczbę komórek pamięci maszyny RAM) w funkcji rozmiaru wejścia. Im większe rozmiary danych wejściowych tym więcej zasobów (czasu, pamięci) jest koniecznych do wykonania danego algorytmu. Złożoność algorytmu jest zatem funkcja rozmiaru danych wejściowych. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 8 / 35

Złożoność algorytmu Złożoność pamięciowa to zależność pomiędzy rozmiarem danych wejściowych a ilośca wykorzystanej pamięci. Jako tę ilość najczęściej przyjmuje się użyta pamięć maszyny abstrakcyjnej (na przykład liczbę komórek pamięci maszyny RAM) w funkcji rozmiaru wejścia. Im większe rozmiary danych wejściowych tym więcej zasobów (czasu, pamięci) jest koniecznych do wykonania danego algorytmu. Złożoność algorytmu jest zatem funkcja rozmiaru danych wejściowych. Złożoność algorytmu zależy nie tylko od rozmiaru ciagu wejściowego (krótke ciagi jest znacznie łatwiej posortować niż długie) ale również od rodzaju wejścia (prawie uporzadkowany ciag jest znacznie łatwiej posortować). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 8 / 35

Rodzaje złożoności W praktyce rozważa się dwa podejścia: rozpatrywanie przypadków najgorszych (złożoność pesymistyczna) oraz zastosowanie określonego sposobu uśrednienia wszystkich możliwych przypadków (złożoność oczekiwana). Złożoność pesymistyczna (ang. worst-case): T(n) = maksymalna ilość zasobu (pamięć, czas) potrzebna do wykonania algorytmu dla dowolnego wejścia o rozmiarze n. Złożoność oczekiwana (ang. average-case): T(n) = oczekiwana ilość zasobu (pamięć, czas) potrzebna do wykonania algorytmu dla dowolnego wejścia o rozmiarze n. Złożoność oczekiwana zależy istotnie od założenia o rozważanej przestrzeni probabilistycznej danych wejściowych. Przestrzeń probabilistyczna danych wejściowych może być bardzo skomplikowana, co powoduje, że wyznaczenie złożoności oczekiwanej wymaga bardzo trudnych analiz matematycznych. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 9 / 35

Notacja asymptotyczna Do wyrażania złożoności stosowany jest opis asymptotycznego wzrostu funkcji: f(n) = O(g(n)) oznaczajacy, że f(n) c g(n) dla pewnej stałej c. Gdy g(n) = log(n), to mówimy, że f(n) jest logarytmiczna. Gdy g(n) = n, to mówimy, że f(n) jest liniowa. Gdy g(n) = n log(n), to mówimy, że f(n) jest liniowao-logarytmiczna. Gdy g(n) = n 2, to mówimy, że złożoność f(n) jest kwadratowa. Jeśli g(n) jest wielomianem, to mówimy o złożoności wielomianowej dla f(n). Jeśli g(n) jest wykładnicza, to mówimy o złożoności wykładniczej dla f(n). Jeśli g(n) jest silnie wykładnicza, to mówimy o złożoności silnie wykładniczej dla f(n). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 10 / 35

Notacja asymptotyczna Funkcja asymptotycznie niemniejsza od funkcji g(n) to taka funkcja f : N R, dla której istnieja c > 0 i n 0 N, że c g(n) f(n) dla wszystkich n n 0. Zbiór funkcji asymptotycznie niemniejszych niż g(n) oznaczamy przez Ω(g(n)). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 11 / 35

Notacja asymptotyczna Funkcja asymptotycznie niemniejsza od funkcji g(n) to taka funkcja f : N R, dla której istnieja c > 0 i n 0 N, że c g(n) f(n) dla wszystkich n n 0. Zbiór funkcji asymptotycznie niemniejszych niż g(n) oznaczamy przez Ω(g(n)). Funkcja asymptotycznie podobna do funkcji g(n) to taka funkcja f : N R, dla której istnieja c 0, c 1 > 0 i n 0 N, że c 0 g(n) f(n) c 1 g(n) dla wszystkich n n 0. Zbiór funkcji asymptotycznie podobnych do g(n) oznaczamy przez Θ(g(n)). A zatem Θ(g(n)) = O(g(n)) Ω(g(n)). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 11 / 35

Notacja asymptotyczna Funkcja asymptotycznie niemniejsza od funkcji g(n) to taka funkcja f : N R, dla której istnieja c > 0 i n 0 N, że c g(n) f(n) dla wszystkich n n 0. Zbiór funkcji asymptotycznie niemniejszych niż g(n) oznaczamy przez Ω(g(n)). Funkcja asymptotycznie podobna do funkcji g(n) to taka funkcja f : N R, dla której istnieja c 0, c 1 > 0 i n 0 N, że c 0 g(n) f(n) c 1 g(n) dla wszystkich n n 0. Zbiór funkcji asymptotycznie podobnych do g(n) oznaczamy przez Θ(g(n)). A zatem Θ(g(n)) = O(g(n)) Ω(g(n)). Przykłady: 1 100 n2 2n = Θ(n 2 ) 3n 3 + 90n 2 5n+6046 = Θ(n 3 ) n 5 + 2 n = Θ(2 n ) n! = Ω(10 n ) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 11 / 35

Problem Sortowania Definicja problemu Niech (U, ) będzie zbiorem liniowo uporzadkowanym z relacja porzadkuj ac a i niech (a 1, a 2,..., a n ) będzie ciagiem n elementów z U, dla pewnego całkowitego n > 0. Znaleźć permutację (a 1, a 2,..., a n ) taka, że (a 1 a 2 a n ). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 12 / 35

Problem Sortowania Definicja problemu Niech (U, ) będzie zbiorem liniowo uporzadkowanym z relacja porzadkuj ac a i niech (a 1, a 2,..., a n ) będzie ciagiem n elementów z U, dla pewnego całkowitego n > 0. Znaleźć permutację (a 1, a 2,..., a n ) taka, że (a 1 a 2 a n ). Przykład Wejście: 8 2 4 9 3 6 Wyjście: 2 3 4 6 8 9 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 12 / 35

Problem Sortowania Definicja problemu Niech (U, ) będzie zbiorem liniowo uporzadkowanym z relacja porzadkuj ac a i niech (a 1, a 2,..., a n ) będzie ciagiem n elementów z U, dla pewnego całkowitego n > 0. Znaleźć permutację (a 1, a 2,..., a n ) taka, że (a 1 a 2 a n ). Przykład Wejście: 8 2 4 9 3 6 Wyjście: 2 3 4 6 8 9 Uwaga! Na U moga składać się zarówno liczby całkowite lub rzeczywiste, jak i U może być zbiorem rekordów, które należy posortować według ich kluczy. Jedynym sposobem ustalenie porzadku jest porównywanie elementów parami. Operacja porównania będzie operacja dominujac a w wszystkich naszych algorytmach sortujacych. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 12 / 35

Popularne algorytmy sortowania Sortowanie przez porównywanie elementów: Sortowanie przez proste wybieranie (ang. selection sort) Sortowanie przez wstawianie (ang. insertion sort) Sortowanie babelkowe (ang. bubblesort) Sortowanie pozycyjne (ang. radix sort) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 13 / 35

Popularne algorytmy sortowania Sortowanie przez porównywanie elementów: Sortowanie przez proste wybieranie (ang. selection sort) Sortowanie przez wstawianie (ang. insertion sort) Sortowanie babelkowe (ang. bubblesort) Sortowanie pozycyjne (ang. radix sort) Sortowanie metoda dziel i zwyciężaj Sortowanie przez scalanie (ang. merge sort) sortowanie szybkie (ang. quicksort) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 13 / 35

Popularne algorytmy sortowania Sortowanie przez porównywanie elementów: Sortowanie przez proste wybieranie (ang. selection sort) Sortowanie przez wstawianie (ang. insertion sort) Sortowanie babelkowe (ang. bubblesort) Sortowanie pozycyjne (ang. radix sort) Sortowanie metoda dziel i zwyciężaj Sortowanie przez scalanie (ang. merge sort) sortowanie szybkie (ang. quicksort) Inne Sortowanie przez zliczanie (ang. counting sort) sortowanie przez kopcowanie (ang. heapsort) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 13 / 35

Sortowanie przez proste wybieranie Idea Sortowanie przez wybieranie polega na tym, że w każdym kroku znajdujemy najmniejszy element w sortowanym ciagu, po czym przenosimy ten element na odpowiednią pozycję do ciagu wynikowego (przez zamianę elementów miejscami). Sortowanie odbywa się w n-1 przebiegach. W i-tym przebiegu szukamy i-tego najmniejszego (największego) elementu. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 14 / 35

Sortowanie przez proste wybieranie Require: tablica A o rozmiarze n {A=[0,...,n-1]} 1: for all i = 0 to n 2 do 2: min = i; 3: for all j = i + 1 to n 1 do 4: if A[j] < A[min] then 5: min = j; 6: end if 7: j = j + 1; 8: end for {zamiana elementu A[min] z elementem A[i] w tablicy A} 9: zamiana (A, min, i); 10: i = i + 1; 11: end for Ze względu na dwie zagnieżdżone pętle, z których każda wykonuje się dokładnie n razy, algorytm wymaga n n porównań, aby posortować n elementowy ciag, czyli jest w klasie O(n 2 ). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 15 / 35

Sortowanie przez proste wybieranie - Przykład nr iteracji (wartość i ) Tablica Minimum 0 [9,1,6,8,4,3,2,0] 0 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 16 / 35

Sortowanie przez proste wybieranie - Przykład nr iteracji (wartość i ) Tablica Minimum 0 [9,1,6,8,4,3,2,0] 0 1 [0,1,6,8,4,3,2,9] 1 jest na właściwej pozycji Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 16 / 35

Sortowanie przez proste wybieranie - Przykład nr iteracji (wartość i ) Tablica Minimum 0 [9,1,6,8,4,3,2,0] 0 1 [0,1,6,8,4,3,2,9] 1 jest na właściwej pozycji 2 [0,1,6,8,4,3,2,9] 2 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 16 / 35

Sortowanie przez proste wybieranie - Przykład nr iteracji (wartość i ) Tablica Minimum 0 [9,1,6,8,4,3,2,0] 0 1 [0,1,6,8,4,3,2,9] 1 jest na właściwej pozycji 2 [0,1,6,8,4,3,2,9] 2 3 [0,1,2,8,4,3,6,9] 3 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 16 / 35

Sortowanie przez proste wybieranie - Przykład nr iteracji (wartość i ) Tablica Minimum 0 [9,1,6,8,4,3,2,0] 0 1 [0,1,6,8,4,3,2,9] 1 jest na właściwej pozycji 2 [0,1,6,8,4,3,2,9] 2 3 [0,1,2,8,4,3,6,9] 3 4 [0,1,2,3,4,8,6,9] 4 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 16 / 35

Sortowanie przez proste wybieranie - Przykład nr iteracji (wartość i ) Tablica Minimum 0 [9,1,6,8,4,3,2,0] 0 1 [0,1,6,8,4,3,2,9] 1 jest na właściwej pozycji 2 [0,1,6,8,4,3,2,9] 2 3 [0,1,2,8,4,3,6,9] 3 4 [0,1,2,3,4,8,6,9] 4 5 [0,1,2,3,4,8,6,9] 6 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 16 / 35

Sortowanie przez proste wybieranie - Przykład nr iteracji (wartość i ) Tablica Minimum 0 [9,1,6,8,4,3,2,0] 0 1 [0,1,6,8,4,3,2,9] 1 jest na właściwej pozycji 2 [0,1,6,8,4,3,2,9] 2 3 [0,1,2,8,4,3,6,9] 3 4 [0,1,2,3,4,8,6,9] 4 5 [0,1,2,3,4,8,6,9] 6 6 [0,1,2,3,4,6,8,9] 8 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 16 / 35

Sortowanie przez proste wybieranie - Przykład nr iteracji (wartość i ) Tablica Minimum 0 [9,1,6,8,4,3,2,0] 0 1 [0,1,6,8,4,3,2,9] 1 jest na właściwej pozycji 2 [0,1,6,8,4,3,2,9] 2 3 [0,1,2,8,4,3,6,9] 3 4 [0,1,2,3,4,8,6,9] 4 5 [0,1,2,3,4,8,6,9] 6 6 [0,1,2,3,4,6,8,9] 8 7 [0,1,2,3,4,6,8,9] 9 jest na właściwej pozycji Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 16 / 35

Sortowanie przez proste wybieranie - Przykład K r o k i a l g o r y t m u Klucze i = 2 i = 3 i = 4 i = 5 i = 6 44 55 12 42 94 18 06 67 06 55 12 42 94 18 44 67 06 12 55 42 94 18 44 67 06 12 18 42 94 55 44 67 06 12 18 42 44 55 94 67 06 12 18 42 44 55 67 94 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 17 / 35

Sortowanie przez proste wybieranie - Koszt algorytmu Złożoność pesymistyczna: Operacja dominujaca: porównywanie elementów. Wejście: ciag uporzadkowany w odwrotnej kolejności. Koszt: T(n) = n 1+n 2+...+2+1 = n(n 1)/2 = O(n 2 ) Złożoność optymistyczna: Operacja dominujaca: porównywanie elementów. Wejście: wszystkie permutacje ciagu wejściowego równie prawdopodobne. Koszt: O(n 2 ). Złożoność pamięciowa: O(1). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 18 / 35

Sortowanie przez proste wybieranie - implementacja w C/C++ void swap ( i n t data [ ], i n t i, i n t j ) { i n t temp = data [ i ] ; data [ i ] = data [ j ] ; data [ j ] = temp ; } i n t max( i n t [ ] a, i n t n ) { i n t currentmax = 0; for ( i n t i = 1; i <= n ; i ++) i f ( a [ currentmax ] < a [ i ] ) currentmax = i ; return currentmax ; } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 19 / 35

Sortowanie przez proste wybieranie - implementacja w C/C++ void s e l e c t i o n S o r t ( i n t [ ] a, i n t s ize ) { for ( i n t n = s ize ; n > 1; n ) { i n t j = max ( a, n 1); swap ( a, j, n 1 ) ; } } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 20 / 35

Sortowanie przez proste wybieranie - implementacja w C/C++ void s e l e c t i o n S o r t ( i n t a [ ], i n t s ize ) { i n t i, j, min, temp ; for ( i = 0; i < size 1; i ++) { min = i ; for ( j = i +1; j < s ize ; j ++) { i f ( a [ j ] < a [ min ] ) min = j ; } temp = a [ i ] ; a [ i ] = a [ min ] ; a [ min ] = temp ; } } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 21 / 35

Sortowanie przez wstawianie Idea Sortowanie przez wstawianie odbywa się w n 1 przebiegach. W i-tym przebiegu elementy na pozycjach 1,...,(i 1) sa już uporzadkowane, a wstawiany i-ty element przepycha się do przodu na właściwe miejsce, tak by stworzył wraz z innymi ciag uporzadkowany długości i. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 22 / 35

Sortowanie przez wstawianie - przykład 8 2 4 9 3 6 2 8 4 9 3 6 2 4 8 9 3 6 2 4 8 9 3 6 2 3 4 8 9 6 2 3 4 6 8 9 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 23 / 35

Sortowanie przez wstawianie Require: tablica A o rozmiarze n {A=[0,...,n-1]} 1: for i = 1 to n 1 do 2: key = A[i]; 3: j = i 1; 4: while j 0 and A[j] > key do 5: A[j + 1] = A[j]; 6: j = j 1; 7: end while 8: A[j + 1] = key; 9: end for Ze względu na dwie zagnieżdżone pętle, z których każda wykonuje się dokładnie n razy, algorytm wymaga n n porównań, aby posortować n elementowy ciag, czyli jest w klasie O(n 2 ). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 24 / 35

Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 1 [1,9,6,8,4,3,2,0] 1 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 1 [1,9,6,8,4,3,2,0] 1 2 [1,6,9,8,4,3,2,0] 6 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 1 [1,9,6,8,4,3,2,0] 1 2 [1,6,9,8,4,3,2,0] 6 3 [1,6,8,9,4,3,2,0] 8 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 1 [1,9,6,8,4,3,2,0] 1 2 [1,6,9,8,4,3,2,0] 6 3 [1,6,8,9,4,3,2,0] 8 4 [1,6,8,4,9,3,2,0] 4 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 1 [1,9,6,8,4,3,2,0] 1 2 [1,6,9,8,4,3,2,0] 6 3 [1,6,8,9,4,3,2,0] 8 4 [1,6,8,4,9,3,2,0] 4 [1,6,4,8,9,3,2,0] 4 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 1 [1,9,6,8,4,3,2,0] 1 2 [1,6,9,8,4,3,2,0] 6 3 [1,6,8,9,4,3,2,0] 8 4 [1,6,8,4,9,3,2,0] 4 [1,6,4,8,9,3,2,0] 4 [1,4,6,8,9,3,2,0] 4 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 1 [1,9,6,8,4,3,2,0] 1 2 [1,6,9,8,4,3,2,0] 6 3 [1,6,8,9,4,3,2,0] 8 4 [1,6,8,4,9,3,2,0] 4 [1,6,4,8,9,3,2,0] 4 [1,4,6,8,9,3,2,0] 4 5 [1,4,6,8,3,9,2,0] 3 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 1 [1,9,6,8,4,3,2,0] 1 2 [1,6,9,8,4,3,2,0] 6 3 [1,6,8,9,4,3,2,0] 8 4 [1,6,8,4,9,3,2,0] 4 [1,6,4,8,9,3,2,0] 4 [1,4,6,8,9,3,2,0] 4 5 [1,4,6,8,3,9,2,0] 3 [1,4,6,3,8,9,2,0] 3 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 1 [1,9,6,8,4,3,2,0] 1 2 [1,6,9,8,4,3,2,0] 6 3 [1,6,8,9,4,3,2,0] 8 4 [1,6,8,4,9,3,2,0] 4 [1,6,4,8,9,3,2,0] 4 [1,4,6,8,9,3,2,0] 4 5 [1,4,6,8,3,9,2,0] 3 [1,4,6,3,8,9,2,0] 3 [1,4,3,6,8,9,2,0] 3 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 1 [1,9,6,8,4,3,2,0] 1 2 [1,6,9,8,4,3,2,0] 6 3 [1,6,8,9,4,3,2,0] 8 4 [1,6,8,4,9,3,2,0] 4 [1,6,4,8,9,3,2,0] 4 [1,4,6,8,9,3,2,0] 4 5 [1,4,6,8,3,9,2,0] 3 [1,4,6,3,8,9,2,0] 3 [1,4,3,6,8,9,2,0] 3 [1,3,4,6,8,9,2,0] 3 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 1 [1,9,6,8,4,3,2,0] 1 2 [1,6,9,8,4,3,2,0] 6 3 [1,6,8,9,4,3,2,0] 8 4 [1,6,8,4,9,3,2,0] 4 [1,6,4,8,9,3,2,0] 4 [1,4,6,8,9,3,2,0] 4 5 [1,4,6,8,3,9,2,0] 3 [1,4,6,3,8,9,2,0] 3 [1,4,3,6,8,9,2,0] 3 [1,3,4,6,8,9,2,0] 3 6 [1,2,3,4,6,8,9,0] 2 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - Przykład nr iteracji (wartość i ) Tablica Rozważany element 0 [9,1,6,8,4,3,2,0] 9 1 [1,9,6,8,4,3,2,0] 1 2 [1,6,9,8,4,3,2,0] 6 3 [1,6,8,9,4,3,2,0] 8 4 [1,6,8,4,9,3,2,0] 4 [1,6,4,8,9,3,2,0] 4 [1,4,6,8,9,3,2,0] 4 5 [1,4,6,8,3,9,2,0] 3 [1,4,6,3,8,9,2,0] 3 [1,4,3,6,8,9,2,0] 3 [1,3,4,6,8,9,2,0] 3 6 [1,2,3,4,6,8,9,0] 2 7 [1,2,3,4,6,8,9,0] 0 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - przykład K r o k i a l g o r y t m u Klucze i = 2 i = 3 i = 4 i = 5 i = 6 i = 7 i = 8 44 55 12 42 94 18 06 67 44 55 12 42 94 18 06 67 12 44 55 42 94 18 06 67 12 42 44 55 94 18 06 67 12 42 44 55 94 18 06 67 12 18 42 44 55 94 06 67 06 12 18 42 44 55 94 67 06 12 18 42 44 55 67 94 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 26 / 35

Sortowanie przez wstawianie - Koszt algorytmu Złożoność pesymistyczna: Operacja dominujaca: porównywanie elementów. Wejście: ciag uporzadkowany w odwrotnej kolejności. Koszt: T(n) = 1+2+3+...+n 1 = n(n 1)/2 = O(n 2 ) Złożoność optymistyczna: Operacja dominujaca: porównywanie elementów. Wejście: wszystkie permutacje ciagu wejściowego równie prawdopodobne. Koszt: O(n 2 ). Złożoność pamięciowa: O(1). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 27 / 35

Sortowanie przez wstawianie - implementacja w C/C++ void i n s e r t ( i n t [ ] a, i n t n, i n t x ) { / / i n s e r t x i n t o a [ 0.. i 1] i n t j ; for ( j = i 1; j >= 0 && x < a [ j ] ; j ) a [ j + 1] = a [ j ] ; a [ j + 1] = x ; } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 28 / 35

Sortowanie przez wstawianie - implementacja w C/C++ void i n s e r t S o r t ( i n t [ ] a, i n t n ) { for ( i n t i = 1; i < n ; i ++) { / / i n s e r t a [ i ] i n t o a [ 0 : i 1] i n s e r t ( a, i, a [ i ] ) ; } } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 29 / 35

Sortowanie babelkowe W sortowaniu babelkowym liczby zachowuja się jak babelki, po kolei, jedna po drugiej ida do góry (lub w prawo). Sortowanie babelkowe jest wykonywane w n 1 fazach. W fazie i-tej wyznaczany jest i-ty najmniejszy/największy element. Idea Sprawdzamy cały ciag od końca. Jeżeli trafimy na parę elementów, w której większy poprzedza mniejszy, to zamieniamy je miejscami. Czynność powtarzamy tak długo, aż podczas sprawdzania całego ciagu, nie zajdzie ani jedna zamiana elementów. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 30 / 35

Sortowanie babelkowe Require: tablica A o rozmiarze n {A=[0,...,n-1]} 1: for i = 0 to n 1 do 2: for j = n downto i + 1 do 3: if A[j 1] > A[j] then 4: Zamiana(A, j 1, j); 5: end if 6: end for 7: end for Ze względu na dwie zagnieżdżone pętle, z których każda wykonuje się dokładnie n razy, algorytm wymaga n n porównań, aby posortować n elementowy ciag, czyli jest w klasie O(n 2 ). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 31 / 35

Sortowanie babelkowe - przykład 44 Klucze i = 1 06 55 44 12 55 42 12 94 42 18 94 06 18 67 67 i = 2 K r o k i a l g o r y t m u i = 3 06 06 12 12 44 18 55 44 18 55 42 42 94 67 67 94 i = 4 06 12 18 42 44 55 67 94 i = 5 06 12 18 42 44 55 67 94 i = 6 06 12 18 42 44 55 67 94 i = 7 06 12 18 42 44 55 67 94 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 32 / 35

Sortowanie przez wstawianie - Koszt algorytmu Złożoność pesymistyczna: Operacja dominujaca: porównywanie elementów. Wejście: ciag uporzadkowany w odwrotnej kolejności. Koszt: T(n) = 1+2+3+...+n 1 = n(n 1)/2 = O(n 2 ) Złożoność optymistyczna: Operacja dominujaca: porównywanie elementów. Wejście: wszystkie permutacje ciagu wejściowego równie prawdopodobne. Koszt: O(n 2 ). Złożoność pamięciowa: O(1). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 33 / 35

Sortowanie babelkowe - implementacja w C/C++ void bubblesort ( i n t A [ ], i n t n ) { for ( i n t i =0; i <n ; i ++) for ( i n t j =n 1; j > i ; j ) i f (A [ j ] < A [ j 1]) { / / zamiana A [ j 1] z A[ j ] i n t temp= A [ j 1]; A [ j 1] = A [ j ] ; A [ j ]= temp ; } } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 34 / 35

Sortowanie babelkowe - implementacja w C/C++ Zmodyfikowany algorytm sortowania babelkowego, którego wykonywanie kończy się z chwila stwierdzenia, że dana tablica a jest już posortowana. #include < s tdbool. h> void bubblesort ( i n t [ ] a, i n t n ) { bool done ; do { done = true ; for ( i n t j = 0; j < n ; j ++) { i f ( a [ j +1] < a [ j ] ) { swap ( a, j, j + 1 ) ; done = false ; } } } while (! done ) ; } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 1 35 / 35