El algoritmo MergeSort

Para combinar (la fase de ``vencer''), podemos utilizar un algoritmo sencillo que utiliza una tabla auxiliar para añadir el elemento que corresponde de cada una de las dos subtablas.

Se comparan los elementos una[iu] y otra[io], el menor se copia a final[ifinal] y se incrementan el índice del origen que se ha copiado (iu o io) y el índice de la tabla destino (ifinal).
Combinar tipo es un O (n log n) basado en la comparación algoritmo de ordenación . La mayoría de las implementaciones de producir una especie estable , lo que significa que la aplicación conserva el orden de entrada de elementos iguales en la salida ordenada. Combinar tipo es un algoritmo de divide y vencerás que fue inventado por John von Neumann en 1945. [1] Una descripción detallada y el análisis de abajo hacia arriba mergesort apareció en un informe de Goldstine y Neumann en 1948. [2] Algoritmo Conceptualmente, una especie de combinación funciona de la siguiente 1. Divida la lista desordenada en sublistas n, cada uno con un elemento (una lista de un elemento se considera clasificado). 2. Repetidamente Combinar sublistas para producir sublistas nuevas hasta que sólo quede una sublista restante.(Esta será la lista ordenada.) 3. Ejemplo de pseudocódigo de arriba hacia abajo fusionar algoritmo de ordenación que utiliza la recursividad para dividir la lista en sub-listas, a continuación, combina sublistas durante los regresos copia de seguridad de la cadena de llamadas.

4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.

función de merge_sort (m lista) / / Si el tamaño de la lista es de 1, tenga en cuenta lo resuelto y devolverlo si la longitud (m) <= 1 volver m / / Tamaño de la lista lo demás es> 1, por lo que divide la lista en dos sublistas var lista de la izquierda, derecha var entero media = longitud (m) / 2 para cada x en m antes de la mitad agregue x a la izquierda para cada x de m después de media o iguales agregue x a la derecha / / Llamar recursivamente merge_sort () para dividir aún más a cada sublista / / Hasta que el tamaño es una sublista izquierda = merge_sort (izquierda) derecha = merge_sort (derecha) / / Fusionar las sublistas devueltos por las llamadas antes de merge_sort () / / Y devolver la sublista combinada resultante volver merge (izquierda, derecha)

22. En este ejemplo, la merge función fusiona las sublistas izquierdo y derecho.
23. 24. 25. 26. 0 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. más append primera (derecha) para dar derecha = reposo (derecha) otra cosa si la longitud (izquierda)> 0 append primero (izquierda) para producir izquierda = reposo (izquierda) otra cosa si la longitud (derecha)> 0 append primero (derecha) para dar derecha = reposo (derecha) final mientras si primero (izquierda) <= primero (derecha) append primero (izquierda) para producir izquierda = reposo (izquierda) función de fusión (izquierda, derecha) lista de resultados var mientras que la longitud (izquierda)> 0 o longitud (derecha)> 0 si la longitud (izquierda)> 0 y la longitud (derecha)>

40.

return resultado

VER GIF:

Un ejemplo de tipo de mezcla. En primer lugar dividir la lista en la unidad más pequeña (1 elemento), y luego comparar cada elemento de la lista al lado de ordenar y unir las dos listas adyacentes. Por último, todos los elementos se ordenan y se fusionaron.

Clase

Algoritmo de clasificación

Estructura de datos

Matriz

Peor de los casos el rendimiento

O (n log n)

Mejor de los casos el rendimiento

O (n log n) típico, O (n) variante natural

El rendimiento promedio de los casos Peor de los casos la complejidad del espacio

O (n log n)

O (n) auxiliar