Scal sortowanie jest algorytmem rekurencyjnym, a złożoność czasowa może być wyrażona jako następująca relacja powtarzalności.
T (n) = 2 T (n / 2) + ɵ (n)
Powyższą rekurencję można rozwiązać za pomocą metody drzewa rekurencyjnego lub metody głównej. Wypada w przypadku II Metody Głównej, a rozwiązaniem nawrotu jest ɵ (n log n).
Złożoność czasowa sortowania scalonego wynosi ɵ (nLogn) we wszystkich 3 przypadkach (najgorszy, średni i najlepszy), ponieważ sortowanie scalone zawsze dzieli tablicę na dwie połowy i zajmuje czas liniowy na scalenie dwóch połówek.
Dzieli tablicę wejściową na dwie połowy, nazywa się dwiema połówkami, a następnie łączy dwie posortowane połowy. Funkcja scal () służy do łączenia dwóch połówek. Scalanie (arr, l, m, r) jest kluczowym procesem, który zakłada, że arr [l..m] i arr [m + 1..r] są sortowane i łączy dwa posortowane pod-tablice w jedno. Zobacz szczegóły implementacji C.
MergeSort(arr[], l, r)
If r > l
1. Find the middle point to divide the array into two halves:
middle m = (l+r)/2
2. Call mergeSort for first half:
Call mergeSort(arr, l, m)
3. Call mergeSort for second half:
Call mergeSort(arr, m+1, r)
4. Merge the two halves sorted in step 2 and 3:
Call merge(arr, l, m, r)
Jeśli przyjrzymy się bliżej diagramowi, zobaczymy, że tablica jest rekurencyjnie dzielona na dwie połowy, aż rozmiar osiągnie 1. Gdy rozmiar osiągnie 1, procesy scalania zaczynają działać i zaczynają scalać tablice z powrotem, aż cała tablica zostanie scalone.