ALS - 009-000 - Zajęcia - Sortowanie bąbelkowe, Informatyka - uczelnia, WWSI i WAT, wwsi, SEM II, Algorytmy i Struktury Danych


Sortowanie bąbelkowe (ang. bubble sort)

Ciąg wejściowy [4,2,5,1,7].

Każdy wiersz symbolizuje wypchnięcie kolejnego największego elementu na koniec ("wypłynięcie największego bąbelka").

Algorytm wykonuje przy każdym z przejść n-1 porównań.

1

0x01 graphic

2

0x01 graphic

3

0x01 graphic

4

0x01 graphic

Niebieskim

kolorem oznaczono końcówkę ciągu już posortowanego.

Czerwonym

kolorem oznaczono porównywanie elementów jakie będą zamienione

Zielonym

kolorem oznaczono porównywanie elementów jakie będą zamienione

for i = (n-1) to 1

for j = 0 to (i-1)

if A[j]<A[j+1]

swap (A[j],A[j+1])

Łączna ilość porównań 0x01 graphic

Zadania

Zadanie 1

Jaka jest złożoność czasowa algorytmu ?

Zadanie 2

Posortuj ciąg : 3,9,7,1,4,2,8

Zadanie 3

Posortuj ciąg : 5,4,3,2,1

Sortowanie przez wstawianie (ang. Insert Sort, Insertion Sort)

Ciąg wejściowy [4,2,5,1,7].

Jeden z najprostszych algorytmów sortowania, którego zasada działania odzwierciedla sposób w jaki ludzie ustawiają karty - kolejne elementy wejściowe są ustawiane na odpowiednie miejsca docelowe.

Poniżej kod sortowania przez wstawianie tabel indeksowanych od zera (zero-based array)

for i = 1 to (n-1)

j = i

while j>0 and A[j] < A[j-1]

swap (A[j],A[j-1])

j=j-1

Zadania

Zadanie 1

Jaka jest złożoność czasowa algorytmu ?

Zadanie 2

Posortuj ciąg : 3,9,7,1,4,2,8

Zadanie 3

Posortuj ciąg : 5,4,3,2,1

Sortowanie Shella (ang. Shell Sort)

1959: Donald Shell

Algorytm sortowania metodą Shella jest ulepszonym algorytmem sortowania przez wstawianie.

Sortowany zbiór dzielimy na podzbiory, których elementy są odległe od siebie w sortowanym zbiorze o pewien odstęp h. Każdy z tych podzbiorów sortujemy algorytmem przez wstawianie. Następnie odstęp zmniejszamy. Powoduje to powstanie nowych podzbiorów (będzie ich już mniej). Sortowanie powtarzamy i znów zmniejszamy odstęp, aż osiągnie on wartość 1. Wtedy sortujemy już normalnie za pomocą Instertion Sort. Jednakże z uwagi na wcześniejsze obiegi sortujące mamy ułatwione zadanie, ponieważ zbiór został w dużym stopniu uporządkowany. Dzięki początkowym dużym odstępom elementy były przesuwane w zbiorze bardziej efektywnie - na duże odległości.

Pierwotnie Shell proponował pierwszy odstęp równy połowie liczby elementów w sortowanym zbiorze. Kolejne odstępy otrzymujemy dzieląc odstęp przez 2 (dzielenie całkowitoliczbowe).

Kluczowym elementem wpływającym na efektywność sortowania metodą Shella jest właściwy dobór ciągu odstępów. Okazuje się, iż ciąg zaproponowany przez twórcę algorytmu jest jednym z najgorszych, ponieważ w kolejnych podzbiorach uczestniczą wielokrotnie te same elementy.

Dotąd problem optymalnych odstępów w algorytmie sortowania metodą Shella nie został rozwiązany matematycznie, ponieważ w ogólnym przypadku jest niezwykle trudny. Wielu badaczy proponowało na wybór tych odstępów różne ciągi liczbowe otrzymując lepsze lub gorsze rezultaty.

input: an array a of length n with array elements numbered 0 to n − 1

inc ← round(n/2)

while inc > 0 do:

for i = inc .. n − 1 do:

temp ← a[i]

j ← i

while j ≥ inc and a[j − inc] > temp do:

a[j] ← a[j − inc]

j ← j − inc

a[j] ← temp

inc ← round(inc / 2.2)

Sortowanie biblioteczne (ang. Library Sort)

2006: Michael A. Bender, Martín Farach-Colton, and Miguel Mosteiro

Algorytm sortowania, który bazuje na algorytmie sortowania przez wstawianie, ale z dodawaniem pustych miejsc w tablicy w celu przyśpieszenie wstawiania elementów.

M.A. Bender, M. Farach-Colton, M. Mosteiro "Insertion Sort is O(n log n)"

Podział algorytmów sortowania:

Stabilny

(Stable)

TAK

zachowuje kolejność elementów o równych wartościach. Oznacza to, że elementy o równych wartościach będą występowały w tej samej kolejności w zbiorze posortowanym, w jakiej występowały w zbiorze nieposortowanym

NIE

kolejność wynikowa elementów o równych wartościach jest nieokreślona, czyli względne uporządkowanie elementów o równych wartościach zwykle nie zostaje zachowane

W miejscu

(in place)

TAK

wymagają stałej liczby dodatkowych struktur danych, która nie zależy od liczby elementów sortowanego zbioru danych (ani od ich wartości). Dodatkowa złożoność pamięciowa jest zatem klasy O(1). Sortowanie odbywa się wewnątrz zbioru. Ma to bardzo istotne znaczenie w przypadku dużych zbiorów danych, gdyż mogłoby się okazać, iż posortowanie ich nie jest możliwe z uwagi na brak pamięci w systemie

NIE

wymagają zarezerwowania w pamięci dodatkowych obszarów, których wielkość jest uzależniona od liczby sortowanych elementów lub od ich wartości. Tego typu algorytmy są zwykle bardzo szybkie w działaniu, jednakże okupione to jest dodatkowymi wymaganiami na pamięć. Zatem w pewnych sytuacjach może się okazać, iż taki algorytm nie będzie w stanie posortować dużego zbioru danych, ponieważ system komputerowy nie posiada wystarczającej ilości pamięci RAM.

Sortowanie

wewnętrzne

(internal sort)

tablic, które są przechowywane w szybkiej, o dostępie swobodnym „wewnętrznej” pamięci komputerów - zwykle RAM

zewnętrzne

(external sort)

rodzaj algorytmów sortowania, które są stosowane, kiedy z pewnych względów nie jest możliwe jednoczesne umieszczenie wszystkich elementów zbioru sortowanego w pamięci operacyjnej. Na przykład plików sekwencyjnych, które są zazwyczaj przechowywane w wolniejszej pamięci „zewnętrznej” z dostępem bezpośrednim tylko do wierzchu każdej sterty danych

Efektywnośćmetod sortowania

Do najważniejszych kryteriów oceny jakości metod sortowania należą:

Ze względu na oszczędność miejsca, elementy sortuje się w tablicy, w której się aktualnie znajdują (in place).

Sortowanie składa się zasadniczo z dwóch rodzajów operacji:

Liczby porównań i przesunięć koniecznych do posortowania zbioru są dobrą miarą efektywności metod sortowania.

Oznaczmy liczbę:

Dla zbioru zawierającego n, elementów:

Porównanie wybranych algorytmów sortowania:

Złożoność obliczeniowa

Złożoność pamięciowa

Najlepsza

Średnia

Najgorsza

Sortowanie przez wstawianie

Insertion sort

0x01 graphic

0x01 graphic

0x01 graphic

1

Sortowanie Shella

Shell sort

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

1

Sortowanie biblioteczne

Library sort

-

0x01 graphic

0x01 graphic

0x01 graphic

Sortowanie bąbelkowe

Buble sort

0x01 graphic

0x01 graphic

0x01 graphic

1



Wyszukiwarka

Podobne podstrony:
ALS - 001-000 - Zadania - ZAJECIA, Informatyka - uczelnia, WWSI i WAT, wwsi, SEM II, Algorytmy i Str
ALS - 009-005 - Program Sortowanie INSERTION SORT, Informatyka - uczelnia, WWSI i WAT, wwsi, SEM II,
ALS - 004-000 - Zajęcia - Listy - teoria, Informatyka - uczelnia, WWSI i WAT, wwsi, SEM II, Algorytm
ALS - 004-000b - Zajęcia - STOS - LIFO - Ćwiczenie ONP, Informatyka - uczelnia, WWSI i WAT, wwsi, SE
ALS - 002-001, Informatyka - uczelnia, WWSI i WAT, wwsi, SEM II, Algorytmy i Struktury Danych
ALS - 007-005a - Program drzewa BST, Informatyka - uczelnia, WWSI i WAT, wwsi, SEM II, Algorytmy i S
ALS - 005-001 - Program Stos ONP-RPN, Informatyka - uczelnia, WWSI i WAT, wwsi, SEM II, Algorytmy i
ALS - 007-002 - Program drzewa BST - AVL, Informatyka - uczelnia, WWSI i WAT, wwsi, SEM II, Algorytm
ALS - 004-002 - Program - Lista - Sito Eratostenesa, Informatyka - uczelnia, WWSI i WAT, wwsi, SEM I
Cw2008, Studia Informatyka PK, Semestr II, Algorytmy i struktury danych
matematyka dyskretna sciaga, Informatyka - uczelnia, WWSI i WAT, wwsi
Algorytmy i struktury danych Wykład 1 Reprezentacja informacji w komputerze
Ściaga sortowania, algorytmy i struktury danych
ukl 74xx, Informatyka PWr, Algorytmy i Struktury Danych, Architektura Systemów Komputerowych, Archit
cw 0 1, pwr, informatyka i zarządzanie, Informatyka, algorytmy i struktury danych
kolokwium1sciaga, Studia Informatyka 2011, Semestr 2, Algorytmy i struktury danych
I kolokwium, Informatyka PWr, Algorytmy i Struktury Danych, Algorytmy i Struktury Danych, kolokwia i
I kolokwium(1), Informatyka PWr, Algorytmy i Struktury Danych, Algorytmy i Struktury Danych, kolokwi
wyk.9, Informatyka PWr, Algorytmy i Struktury Danych, Architektura Systemów Komputerowych, Assembler

więcej podobnych podstron