Está en la página 1de 22

Ordenamiento por Mezclas

Sucesivas
MergeSort
Qu es Merge?
Es un algoritmo de ordenamiento recursivo.

El mergeSort tiene tiempo de ejecucin dado por el orden O(n log(n))

Es de complejidad logartmica, lo cul lo hace ms rpido.

Tambin llamado Mezclas Sucesivas u Ordenamiento por unin.

Est basado en la tcnica de divide y vencers


Funcionamiento
Si la longitud del array es menor o igual a 1,
entonces ya est ordenado

El array a ordenarse se divide en dos mitades.

Cada mitad se ordena de forma recursiva


aplicando el mtodo del MergeSort.

A continuacin las dos mitades ya ordenadas


se mezclan formando una secuencia ordenada.
Algortimo
MERGESORT (A[], INI, FIN)
{INI y FIN representan las posiciones del extremo izquierdo y
derecho respectivamente del conjunto de elementos a ordenar}
{MID es una variable local de tipo entero}
1. Si INI<FIN entonces
1. MID <- (INI+FIN)/2
2. MERGESORT (A, INI, FIN)
3. MERGESORT (A, INI+1, FIN)
4. MERGE (A, INI, MID, FIN)
2. Fin del procedimiento 1
3. Fin del modulo MERGESORT
MERGE(A[],INI, MID,FIN)
{INI y FIN representan las posiciones del extremos izquierdo y derecho
respectivamente del conjunto de elementos a ordenar, MID representa la
posicin a la mitad donde se particionar el vector}

{Se crea un vector tipo entero B[N], donde N es el tamao del arreglo
a ordenar, H,I,J y K son variables enteras}

1. Hacer H<-INI, I <- INI, J <- MID+1


2. Repetir mientras (H<=MID && J<=FIN)
2.1 Si A[H]<=A[J] entonces
B[I] <- A[H]
H++
2.2 Fin del ciclo de paso 2.1
2.3 entonces
B[i] <- A[J]
J++
2.4 Fin del ciclo de paso 2.3
I++
3.Fin del ciclo de paso 2
4. Si H>MID entonces
5. Repetir con K desde J hasta
K<=FIN B[I] <- A[K]
I++
6. Fin del ciclo de paso 5
7. Entonces
7.1 Repetir con K desde H hasta K<=MID
B[I] <- A[K]
I++
7.2 Fin del ciclo del paso 7.1
8. Repetir con K desde INI hasta K<=FIN
A[K] <- B[K]
9. Fin del procedimiento MERGE
Separacin (Divisin)
54 26 93 17 77 31 44 55 20
54 26 93 17 77 31 44 55 20
54 26 93 17 77 31 44 55 20

54 26 93 17 77 31 44 55 20
54 26 93 17 77 31 44 55 20

54 26 93 17 77 31 44 55 20

54 26 93 17 77 31 44 55 20
54 26 93 17 77 31 44 55 20

54 26 93 17 77 31 44 55 20

54 26 93 17 77 31 44 55 20

54 26 93 17 77 31 44 55 20
54 26 93 17 77 31 44 55 20

54 26 93 17 77 31 44 55 20

54 26 93 17 77 31 44 55 20

54 26 93 17 77 31 44 55 20

55 20
54 26 93 17 77 31 44 55 20

54 26 93 17 77 31 44 55 20

54 26 93 17 77 31 44 55 20

54 26 93 17 77 31 44 55 20

55 20
Ordenamiento
54 26 93 17 77 31 44 55 20

54 26 93 17 77 31 44 55 20

54 26 93 17 77 31 44 55 20

26 54 17 93 31 77 44 55 20

20 55
54 26 93 17 77 31 44 55 20

54 26 93 17 77 31 44 55 20

26 54 17 93 31 77 44 55 20

44 20 55
54 26 93 17 77 31 44 55 20

17 26 54 93 77 31 44 55 20

20 44 55
54 26 93 17 77 31 44 55 20

17 26 54 93 20 31 44 55 77
17 20 26 31 44 54 55 77 93
Por qu la complejidad es
Logartmica (N*log(N))?
Slo se recorrer el listado completamente por cada nivel del rbol
que se crea, y podemos decir que al ser un rbol binario (son los
rboles donde un nodo padre solo puede tener como mximo 2
nodos hijos), entonces el nivel mximo que puede llegar a tener es
el logaritmo en base 2 de la cantidad de elementos, o lo que es lo
mismo, log2(N).
Pero en programacin, cuando estudiamos la complejidad de un
algoritmo determinado, acotamos las complejidades al peor de los
casos que pueda tener, y por ende descartamos la base 2, para
convertirla en log(N). Es as como determinamos la complejidad
N*log(N) para este algoritmo de ordenamiento.