SORTOWANIE PRZEZ SCALANIE(MERGE SORT)
1. Dziel: dzielimy ciąg o wielkości n elementów na dwa podciągu po n/2 elementów każdy
2. Zwyciężaj: sortujemy otrzymane podciągi, używając rekurencyjnie sortowania przez scalanie
3. Połącz: scalamy posortowane podciągi aż uzyskamy jeden posortowany ciąg.
DZIELENIE
SCALANIE
Przyjmijmy, że rozmiar pierwotnego problemu n jest potęgą dwójki. Wówczas w każdym kroku podziału dzielimy problem na podproblemy rozmiaru dokładnie n/2.
Sortowanie przez scalanie jednego elementu wykonuje się w czasie stały, natomiast jeśli mamy n>1 to musimy czas rozbić na trzy składniki:
1. Dziel – znajdujemy środek przedziału, co zajmuje czas stały czyli (1),
2. Zwyciężaj – wywołujemy rekurencyjnie sortowanie przez scalanie dla dwóch podtablic, każda rozmiaru n/1 daje to nam w sumie czas 2T(n/2).
3. Procedura merge sort działa w czasie (n) gdzie n=p-l+1 jest liczbą scalanych elementów.
Sortowanie szybkie – quicksort
1. Dziel: Tablica jest dzielona na dwie podtablice, w ten sposób że wybieramy element dzielący, zwany też pivotem i w jednej podtablicy umieszczamy elementy mniejsze bądź równe elementowi dzielącemu a w drugiej – elementy większe bądź równe elementowi dzielącemu.
2. Zwyciężaj: Dwie podtablice są sortowane za pomocą wywołań rekurencyjnych algorytmu quicksort.
3. Połącz: Ponieważ podtablice są już sortowane to nie trzeba już nic łączyć gdyż cała tablica jest posortowana
Pierwszy podział, element dzielący pierwszy wybrany z tablicy, wersja zgodna z kodem źródłowym.
Pierwszy podział, element dzielący pierwszy wybrany z tablicy. Wersja wykorzystująca dodatkową tablicę
Sortowanie przez zliczanie – Countingsort
Działanie algorytmu polega na zliczaniu wystąpień poszczególnych cyfr. Przeglądamy tablicę wyjściową A a ilość wystąpień zapisujemy w pomocniczej tablicy C, gdzie indeks tablicy będzie odpowiadał odpowiedniej cyfrze. Na początek tablicę pomocniczą zerujemy. Kiedy zostanie osiągnięty koniec tablicy wyjściowej to w tablicy pomocniczej znajduje się odpowiednia liczba wystąpień dla każdej cyfry. Wtedy wyliczamy pozycję poszczególnych cyfr i wpisujemy do tablicy wynikowej B. Zgodnie z danymi zawartymi w tablicy pomocniczej
Stan przed zliczaniem
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
A |
2 |
3 |
4 |
5 |
5 |
2 |
3 |
1 |
|
|
|
|
|
|
|
|
|
|
1 |
2 |
3 |
4 |
5 |
|
|
|
C |
0 |
0 |
0 |
0 |
0 |
|
|
|
Stan po zliczeniu
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
A |
2 |
3 |
4 |
5 |
5 |
2 |
3 |
1 |
|
|
|
|
|
|
|
|
|
|
1 |
2 |
3 |
4 |
5 |
|
|
|
C |
1 |
2 |
2 |
1 |
2 |
|
|
|