Przeczytaj
Sortowanie pozycyjne słów
W wypadku sortowania pozycyjnego słów, podobnie jak przy sortowaniu pozycyjnym dat i liczb, nie porównuje się ze sobą wartości wprost, tylko ich kolejne elementy składowe, zaczynając do najmniej znaczącego.
Przeanalizujmy przykład sortowania zbioru słów za pomocą algorytmu sortowania pozycyjnego. Naszym zadaniem jest uporządkowanie (od A do Z) następującego zbioru słów:
DEC,
DAC,
CAD.
Zacznijmy od przypisania określonej liczby naturalnej każdej literze alfabetu łacińskiego. Liczby te będą pełniły rolę „odpowiedników”, za pomocą których określimy, czy dane dwie litery są na odpowiednich miejscach.
W przedstawionej tabeli kolejnym literom alfabetu łacińskiego przypisano kolejne liczby naturalne.
Litera | Przypisana liczba |
---|---|
A | 1 |
B | 2 |
C | 3 |
D | 4 |
E | 5 |
F | 6 |
G | 7 |
H | 8 |
I | 9 |
J | 10 |
K | 11 |
L | 12 |
M | 13 |
N | 14 |
O | 15 |
P | 16 |
Q | 17 |
R | 18 |
S | 19 |
T | 20 |
U | 21 |
V | 22 |
W | 23 |
X | 24 |
Y | 25 |
Z | 26 |
Następnie należy posortować słowa według kolejnych pozycji (wykorzystamy porządek leksykograficznyporządek leksykograficzny), zaczynając od pozycji najmniej znaczącej, za pomocą stabilnegostabilnego algorytmu sortowania, np. sortowania bąbelkowego, kubełkowego, przez wstawianie. Grafika przedstawia, jak wygląda zbiór po sortowaniach na kolejnych pozycjach. Kolorami oznaczono, według której pozycji odbywało się sortowanie.
Przeanalizujmy powyższy przykład bardziej szczegółowo, a jako stabilny algorytm sortowania wybierzmy algorytm sortowania bąbelkowego.
Algorytm sortowania bąbelkowego nie jest jedynym stabilnym algorytmem sortowania. Do tej grupy algorytmów zaliczamy również m.in. sortowanie przez zliczanie, sortowanie przez wstawianie, sortowanie kubełkowe, sortowanie przez scalanie.
Numery kolejnych pozycji (zaczynając od najmniej znaczącej) oznaczono kolejno 0, 1, 2:
Dla pozycji 2:
Czy 3 > 3? (C > C) – porównywane są wartości liczbowe przypisane do odpowiednich liter, ponieważ algorytm sortowania jest stabilny, nie następuje zamiana.
Czy 3 > 4? (C > D) – porównywane są kolejne liczby, jednak zamiana nie następuje, ponieważ chcemy posortować zbiór niemalejąco.
Po przejściu wszystkich liter na pozycji 2 nie nastąpiła zmiana, w związku z czym można zakończyć wykonywanie algorytmu sortowania bąbelkowego i przejść do pozycji nr 1.
Dla pozycji 1:
Czy 5 > 1? (E > A) – tak, wykonywana jest więc zamiana słów.
Czy 5 > 1? (E > A) – tak, wykonywana jest więc zamiana słów.
Po kolejnym przejściu wszystkich liter na pozycji 1 nie nastąpiła zmiana, w związku z czym można zakończyć wykonywanie algorytmu sortowania bąbelkowego i przejść do pozycji nr 0.
Dla pozycji 0:
Czy 4 > 3? (D > C) – tak, następuje zamiana słów.
Czy 4 > 4? (D > D) – ponieważ algorytm sortowania jest stabilny, nie następuje zamiana.
Po przejściu wszystkich liter na pozycji 0 nie nastąpiła zmiana, w związku z czym można zakończyć wykonywanie algorytmu sortowania bąbelkowego i zakończyć algorytm.
Pseudokod
Podczas sortowania pozycyjnego zadanego zbioru słów postępujemy zgodnie z następującym algorytmem.
Specyfikacja:
Dane:
Z – tablica słów długości n
n – liczba naturalna; długość słów zawartych w tablicy Z
Wynik:
Funkcja zwraca posortowaną tablicę Z.
W przedstawionym pseudokodzie zostało przyjęte, że każdy element ze zbioru Z
składa się z n
znaków. Pozycja 0
jest najbardziej znaczącą pozycją, natomiast pozycja n - 1
– najmniej znacząca.
Złożoność obliczeniowa
Sortowanie według kolejnych pozycji (liter) przeprowadzane jest w czasie liniowym O(n). Sortowanie wykonywane jest tyle razy, z ilu liter składają się słowa z danego zbioru.
Słownik
algorytm, który dla dwóch równych elementów w zbiorze danych wejściowych zachowuje ich kolejność
sposób porządkowania ciągów w sposób analogiczny do porządku alfabetycznego