Unisci ordinamento è un algoritmo ricorsivo e la complessità temporale può essere espressa come segue la relazione di ricorrenza.
T(n) = 2T(n/2) + ɵ(n)
La ricorrenza sopra può essere risolta usando il metodo Recurrence Tree o il metodo Master. Cade nel caso II del Metodo Master e la soluzione della ricorrenza è ɵ (n log n).
La complessità temporale di Merge Sort è ɵ (nLogn) in tutti e 3 i casi (peggiore, medio e migliore) poiché l'ordinamento di merge divide sempre l'array in due parti e prende il tempo lineare per unire due metà.
Divide l'array di input in due parti, chiama se stesso per le due metà e quindi unisce le due metà ordinate. La funzione merg () viene utilizzata per unire due metà. L'unione (arr, l, m, r) è un processo chiave che presuppone che arr [l..m] e arr [m + 1..r] siano ordinati e unisca i due sub-array ordinati in uno. Vedi la seguente implementazione C per i dettagli.
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)
Se osserviamo più da vicino il diagramma, possiamo vedere che l'array è diviso ricorsivamente in due parti fino a quando la dimensione diventa 1. Una volta che la dimensione diventa 1, i processi di fusione entrano in azione e iniziano a unire gli array fino a l'array completo è unito.