Merge Sort es un algoritmo recursivo y la complejidad del tiempo se puede expresar como la siguiente relación de recurrencia.
T (n) = 2T (n / 2) + ɵ (n)
La recurrencia anterior se puede resolver utilizando el método del árbol de recurrencia o el método maestro. Cae en el caso II del Método maestro y la solución de la recurrencia es ɵ (n log n).
La complejidad de tiempo de Merge Sort es ɵ (nLogn) en los 3 casos (peor, promedio y mejor), ya que la clasificación de fusión siempre divide la matriz en dos mitades y toma tiempo lineal para fusionar dos mitades.
Divide la matriz de entrada en dos mitades, se llama a sí misma para las dos mitades y luego combina las dos mitades ordenadas. La función merg () se usa para fusionar dos mitades. La combinación (arr, l, m, r) es un proceso clave que supone que arr [l..m] y arr [m + 1..r] están ordenados y fusiona los dos sub-arrays ordenados en uno. Vea la siguiente implementación de C para más detalles.
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)
Si observamos más de cerca el diagrama, podemos ver que la matriz se divide recursivamente en dos mitades hasta que el tamaño se convierte en 1. Una vez que el tamaño se convierte en 1, los procesos de fusión entran en acción y comienzan a fusionarse de nuevo hasta que la matriz completa esté fusionado