El ordenamiento por mezcla (merge sort) divide la lista desordenada en sublistas más pequeñas, ordena cada sublista de forma recursiva mediante mezcla, y luego combina las sublistas ordenadas en una sola lista ordenada. Primero divide la lista en mitades repetidamente hasta que quedan sublistas de un solo elemento, las cuales ya están ordenadas, y luego va reconstruyendo la lista ordenada grande combinando sublistas adyacentes de forma ordenada.
2. Merge-sort
• Conceptualmente, el ordenamiento por mezcla funciona de la siguiente
manera:
– Si la longitud de la lista es 0 ó 1, entonces ya está ordenada. En otro caso:
– Dividir la lista desordenada en dos sublistas de aproximadamente la mitad del
tamaño.
– Ordenar cada sublista recursivamente aplicando el ordenamiento por mezcla.
– Mezclar las dos sublistas en una sola lista ordenada.
• El ordenamiento por mezcla incorpora dos ideas principales para mejorar
su tiempo de ejecución:
– Una lista pequeña necesitará menos pasos para ordenarse que una lista
grande.
– Se necesitan menos pasos para construir una lista ordenada a partir de dos
listas también ordenadas, que a partir de dos listas desordenadas. Por
ejemplo, sólo será necesario entrelazar cada lista una vez que están
ordenadas.
3. Proceso Principal
• Proceso principal
• Escribir "Ingrese el tamano del vector";
• Leer num;
• dimension 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
4. Subproceso:Mezcla
• SubProceso mezcla ( array por referencia, n )
• n1 <- 0; n2 <- 0; x <- 1; t <- 1;
• Si n > 1 Entonces
• Si n mod 2 = 0 Entonces
• n1 <- trunc(n / 2);
• n2 <- n1;
• Sino
• n1 <- trunc(n / 2);
• n2 <- n1+1;
• FinSi
• dimension vector1[n1];
• dimension vector2[n2];
• Para x<-1 Hasta n1 Con Paso 1 Hacer
• vector1[x] <- array[x];
• FinPara
• Para t <- 1 Hasta n2 Con Paso 1 Hacer
• vector2[t] <- array[x];
• x <- x+1;
• FinPara
• mezcla(vector1,n1);
• mezcla(vector2,n2);
• mezclar(vector1, n1, vector2, n2, array);
• FinSi
• FinSubProceso
5. Subproceso:Mezclar
• SubProceso mezclar (arreglo1, n1, arreglo2, n2, arreglo3 por referencia)
• x1<-1;
• x2<-1;
• x3<-1;
• Mientras (x1 <= n1 y x2 <= n2) Hacer
• Si arreglo1[x1] < arreglo2[x2] Entonces
• arreglo3[x3] <- arreglo1[x1];
• x1<-x1 + 1;
• Sino
• arreglo3[x3] <- arreglo2[x2];
• x2<-x2 + 1;
• FinSi
•
• x3<-x3 + 1;
• FinMientras
• Mientras x1 <= n1 Hacer
• arreglo3[x3] <- arreglo1[x1]
• x1<-x1 + 1;
• x3<-x3 + 1;
• FinMientras
• Mientras x2 <= n2 Hacer
• arreglo3[x3] <- arreglo1[x2]
• x2<-x2 + 1;
• x3<-x3 + 1;
• FinMientras
• FinSubProceso