Unisci ordinamento è un algoritmo ricorsivo e la complessità temporale può essere espressa come seguente relazione di ricorrenza.
T (n) = 2T (n / 2) + ɵ (n)
La ricorrenza sopra può essere risolta utilizzando il metodo Albero delle ricorrenze 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) in quanto il tipo di unione divide sempre l'array in due metà e impiega un tempo lineare per unire due metà.
Divide la matrice di input in due metà, si chiama 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 sotto-array ordinati in uno. Vedere 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 in modo ricorsivo in due metà fino a quando la dimensione diventa 1. Una volta che la dimensione diventa 1, i processi di unione entrano in azione e iniziano a fondere nuovamente le matrici fino a quando l'array completo non è fuse.