El algoritmo MergeSort
Para combinar (la fase de ``vencer''), podemos utilizar un algoritmo sencillo que utiliza una tabla auxiliar para aadir 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 comparacin algoritmo de ordenacin . La mayora de las implementaciones de producir una especie estable , lo que significa que la aplicacin conserva el orden de entrada de elementos iguales en la salida ordenada. Combinar tipo es un algoritmo de divide y vencers que fue inventado por John von Neumann en 1945. [1] Una descripcin detallada y el anlisis de abajo hacia arriba mergesort apareci en un informe de Goldstine y Neumann en 1948. [2] Algoritmo Conceptualmente, una especie de combinacin 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 slo quede una sublista restante.(Esta ser la lista ordenada.) 3. Ejemplo de pseudocdigo de arriba hacia abajo fusionar algoritmo de ordenacin que utiliza la recursividad para dividir la lista en sub-listas, a continuacin, 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.
funcin de merge_sort (m lista) / / Si el tamao de la lista es de 1, tenga en cuenta lo resuelto y devolverlo si la longitud (m) <= 1 volver m / / Tamao de la lista lo dems 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 despus de media o iguales agregue x a la derecha / / Llamar recursivamente merge_sort () para dividir an ms a cada sublista / / Hasta que el tamao 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 funcin fusiona las sublistas izquierdo y derecho.
23. 24. 25. 26. 0 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. ms 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) funcin de fusin (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 ms pequea (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 clasificacin
Estructura de datos
Matriz
Peor de los casos el rendimiento
O (n log n)
Mejor de los casos el rendimiento
O (n log n) tpico, 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