Podstawy sortowania

WPROWADZENIE

Sortowaniem nazywamy proces ustawiania zbioru obiektów w określonym porządku [Wirth]. Sortowanie stosuje się w celu ułatwienia późniejszego wyszukiwania elementów sortowanego zbioru.


SPECYFIKACJA
Problem sortowania [Cormen].

DANE WEJŚCIOWE
Ciąg n liczb (a_1, a_2, ..., a_n).

DANE WYJŚCIOWE
Permutacja (zmiana kolejności) (a_1', a_2', ..., a_n')
ciągu wejściowego taka, że a_1' <= a_2' <= ... <= a_n'.

Podział metod sortowania:

Algorytmy sortowania są zazwyczaj klasyfikowane według kilku kryteriów.

MODELE SORTOWANIA

Podstawowy model sortowania polega na porównywaniu całych kluczy w celu ustalenia, który jest większy. Mamy teoretyczne ograniczenie na złożoność czasową O(n log n). Czasem można zastosować inne podejście.

W sortowaniu pozycyjnym na raz przetwarza się fragmenty kluczy, a nie całe klucze [radix sort]. Przykładem może być sprawdzanie kolejnych cyfr liczby naturalnej lub znaków w napisie. Można zaczynać sortowanie od cyfr najbardziej znaczących lub najmniej znaczących.

Jeżeli klucze należą do skończonego zbioru k-elementowego, to zamiast porównywania kluczy można zliczać wystąpienia kolejnych kluczy [counting sort]. Złożoność czasowa to O(n+k), złożoność pamięciowa to O(k) [klucze nierozróżnialne] lub O(n+k) [klucze rozróżnialne, to jest właściwie sortowanie bukietowe, bucket sort].

STABILNOŚĆ

Metodę sortowania nazywamy stabilną, jeżeli podczas procesu sortowania pozostaje nie zmieniony względny porządek obiektów o identycznych kluczach. Przykład: alfabetyczna lista nazwisk uczniów sortowana wg ocen.


Przykład sortowania par liczb całkowitych względem pierwszej wartości.
(4, 1) (3, 7) (3, 1) (5, 6) - oryginalna kolejność
(3, 7) (3, 1) (4, 1) (5, 6) - kolejność zachowana (stabilność)
(3, 1) (3, 7) (4, 1) (5, 6) - kolejność zmieniona (brak stabilności)

PRZYKŁADOWE ALGORYTMY STABILNE

n to liczba elementów do posortowania, k to liczba różnych elementów.

PRZYKŁADOWE ALGORYTMY NIESTABILNE