Está en la página 1de 5

UNIVERSIDAD NACIONAL

“PEDRO RUIZ GALLO”


Facultad de ingeniería civil,
sistemas y arquitectura

Escuela profesional de ingeniería de sistemas

Tema: Ordenamiento Por Mezcla (Merge-Sort)

Curso: Algoritmos y Estructura de Datos

Docente: Ing. Celi Arévalo Ernesto

Integrantes:
Alvarez Rojas Deyvi Fernando
Domínguez Montalván Isaías Eduardo

Lambayeque, noviembre, 2018


ORDENAMIENTO POR MEZCLA
(MERGE-SORT)

Concepto
Merge Sort es un algoritmo de dividir y conquistar con una complejidad de
ejecución caracterizada por la relación de recurrencia.

Si se piensa en este algoritmo recursivamente, podemos imaginar que dividirá la


lista hasta tener un elemento en cada lista, luego lo compara con el que está a
su lado y según corresponda, lo sitúa donde corresponde.

¿Cómo combinar eficientemente dos listas ordenadas?


Usando un array auxiliar y un número lineal de comparaciones:
 Controlar la posición del elemento más pequeño en cada mitad.
 Añadir el más pequeño de los dos a un vector auxiliar.
 Repetir hasta que se hayan añadido todos los elementos
Código en C
Ordenamiento
 Proceso principal
 Escribir “Ingrese el tamaño del vector”

 Leer num;

 Dimensión vector[num];

 Para i<-1 Hasta num Con Paso 1 Hacer

 Escribir “Ingrese el numero”, i;

 Leer vector[i];

 FinPara

 Mezcla(vector, num);

 Escribir“los elementos ordenados del vector son: ”;

 Para i<-1 Hasta num Con Paso 1 Hacer

 Escribir vector[i];

 FinPara

 FinProceso

Procesos
Se divide en dos procesos, primero se divide en partes iguales la lista:

public static void mergesort(int[ ] matrix, int init, int n)


{
int n1;
int n2;
if (n > 1)
{
n1 = n / 2;
n2 = n - n1;
mergesort(matrix, init, n1);
mergesort(matrix, init + n1, n2);
merge(matrix, init, n1, n2);
}
}

Y el algoritmo que nos permite mezclar los elementos según corresponda:


private static void merge(int[ ] matrix, int init, int n1, int n2)
{
int[ ] buffer = new int[n1+n2];
int temp = 0;
int temp1 = 0;
int temp2 = 0;
int i;
while ((temp1 < n1) && (temp2 < n2))
{
if (matrix[init + temp1] < matrix[init + n1 + temp2])
buffer[temp++] = matrix[init + (temp1++)];
else
buffer[temp++] = matrix[init + n1 + (temp2++)];
}
while (temp1 < n1)
buffer[temp++] = matrix[init + (temp1++)];
while (temp2 < n2)
buffer[temp++] = matrix[init + n1 + (temp2++)];
for (i = 0; i < n1+n2; i++)
matrix[init + i] = buffer[i];
}
Bibliografía
(s.f.). Obtenido de https://pt.slideshare.net/MarioPalmaAvila/merge-sort-
17016364/3?smtNoRedir=1

B., F. A. (2007). Algoritmo de ordenamiento.

Granada, U. d. (s.f.). Algoritmos de ordenación. Granada, ESpaña: DECSAI.

También podría gustarte