fbpx
Wikipedia

Ordenamiento por mezcla

El algoritmo de ordenamiento por mezcla (merge sort en inglés) es un algoritmo de ordenamiento externo estable basado en la técnica divide y vencerás. Es de complejidad O(n log n).

Ejemplo de ordenamiento por mezcla.

Descripción

Fue desarrollado en 1945 por John Von Neumann.[1]

Conceptualmente, el ordenamiento por mezcla funciona de la siguiente manera:

  1. Si la longitud de la lista es 0 o 1, entonces ya está ordenada. En otro caso:
  2. Dividir la lista desordenada en dos sublistas de aproximadamente la mitad del tamaño.
  3. Ordenar cada sublista recursivamente aplicando el ordenamiento por mezcla.
  4. Mezclar las dos sublistas en una sola lista ordenada.

El ordenamiento por mezcla incorpora dos ideas principales para mejorar su tiempo de ejecución:

  1. Una lista pequeña necesitará menos pasos para ordenarse que una lista grande.
  2. 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.

A continuación se describe el algoritmo en pseudocódigo (se advierte de que no se incluyen casos especiales para vectores vacíos, etc.; una implementación en un lenguaje de programación real debería tener en cuenta estos detalles):

function mergesort(m) var list left, right, result if length(m) ≤ 1 return m else var middle = length(m) / 2 for each x in m up to middle - 1 add x to left for each x in m at and after middle add x to right left = mergesort(left) right = mergesort(right) if last(left) ≤ first(right) append right to left return left result = merge(left, right) return result 
function merge(left, right) var list result while length(left) > 0 and length(right) > 0 if first(left) ≤ first(right) append first(left) to result left = rest(left) else append first(right) to result right = rest(right) if length(left) > 0 append rest(left) to result if length(right) > 0 append rest(right) to result return result 

Ordenamiento MergeSort Fue desarrollado en 1945 por John Von Neumman. El método QuickSort divide la estructura en dos y ordena cada mitad recursivamente. El caso del mergesort es el opuesto, en este método se unen dos estructuras ordenadas para formar una sola ordenada correctamente. Este tipo de ordenamiento es útil cuando se tiene una estructura ordenada y los nuevos datos a añadir se almacenan en una estructura temporal para después agregarlos a la estructura original de manera que vuelva a quedar ordenada. • Conceptualmente, el ordenamiento por mezcla funciona de la siguiente manera: • Si la longitud de la lista es 0 o 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: 1. Una lista pequeña necesitará menos pasos para ordenarse que una lista grande. 2. 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.

Comparación con otros algoritmos de ordenamiento

Aunque heapsort tiene los mismos límites de tiempo que merge sort, requiere sólo Θ(1) espacio auxiliar en lugar del Θ(n) de merge sort, y es a menudo más rápido en implementaciones prácticas. Quicksort, sin embargo, es considerado por mucho como el más rápido algoritmo de ordenamiento de propósito general. En el lado bueno, merge sort es un ordenamiento estable, paraleliza mejor, y es más eficiente manejando medios secuenciales de acceso lento. Merge sort es a menudo la mejor opción para ordenar una lista enlazada: en esta situación es relativamente fácil implementar merge sort de manera que sólo requiera Θ(1) espacio extra, y el mal rendimiento de las listas enlazadas ante el acceso aleatorio hace que otros algoritmos (como quicksort) den un bajo rendimiento, y para otros (como heapsort) sea algo imposible.

Para Perl 5.8, merge sort es el algoritmo de ordenamiento por defecto (lo era quicksort en versiones anteriores de Perl). En Java los métodos de ordenación de Arrays usan merge sort o una modificación de quicksort dependiendo de los tipos de datos y por cuestiones de eficiencia cambian a ordenamiento por inserción cuando se están ordenando menos de siete elementos en el array.

Referencias

  1. Knuth, Donald (1998). "Section 5.2.4: Sorting by Merging". Sorting and Searching. The Art of Computer Programming. 3 (2nd ed.). Addison-Wesley. pp. 158–168. ISBN 0-201-89685-0.

Enlaces externos

  • Distintas implementaciones del algoritmo en Wikibooks (inglés)
  • Distintas implementaciones del algoritmo en RosettaCode.org (inglés)

Bibliotecas

  • Sort::Merge Módulo Perl en CPAN
  • File::MergeSort Módulo Perl en CPAN
  •   Datos: Q189057
  •   Multimedia: Merge sort

ordenamiento, mezcla, algoritmo, ordenamiento, mezcla, merge, sort, inglés, algoritmo, ordenamiento, externo, estable, basado, técnica, divide, vencerás, complejidad, ejemplo, ordenamiento, mezcla, Índice, descripción, comparación, otros, algoritmos, ordenamie. El algoritmo de ordenamiento por mezcla merge sort en ingles es un algoritmo de ordenamiento externo estable basado en la tecnica divide y venceras Es de complejidad O n log n Ejemplo de ordenamiento por mezcla Indice 1 Descripcion 2 Comparacion con otros algoritmos de ordenamiento 3 Referencias 4 Enlaces externos 4 1 BibliotecasDescripcion EditarFue desarrollado en 1945 por John Von Neumann 1 Conceptualmente el ordenamiento por mezcla funciona de la siguiente manera Si la longitud de la lista es 0 o 1 entonces ya esta ordenada En otro caso Dividir la lista desordenada en dos sublistas de aproximadamente la mitad del tamano 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 ejecucion Una lista pequena necesitara menos pasos para ordenarse que una lista grande Se necesitan menos pasos para construir una lista ordenada a partir de dos listas tambien ordenadas que a partir de dos listas desordenadas Por ejemplo solo sera necesario entrelazar cada lista una vez que estan ordenadas A continuacion se describe el algoritmo en pseudocodigo se advierte de que no se incluyen casos especiales para vectores vacios etc una implementacion en un lenguaje de programacion real deberia tener en cuenta estos detalles function mergesort m var list left right result if length m 1 return m else var middle length m 2 for each x in m up to middle 1 add x to left for each x in m at and after middle add x to right left mergesort left right mergesort right if last left first right append right to left return left result merge left right return result function merge left right var list result while length left gt 0 and length right gt 0 if first left first right append first left to result left rest left else append first right to result right rest right if length left gt 0 append rest left to result if length right gt 0 append rest right to result return result Ordenamiento MergeSort Fue desarrollado en 1945 por John Von Neumman El metodo QuickSort divide la estructura en dos y ordena cada mitad recursivamente El caso del mergesort es el opuesto en este metodo se unen dos estructuras ordenadas para formar una sola ordenada correctamente Este tipo de ordenamiento es util cuando se tiene una estructura ordenada y los nuevos datos a anadir se almacenan en una estructura temporal para despues agregarlos a la estructura original de manera que vuelva a quedar ordenada Conceptualmente el ordenamiento por mezcla funciona de la siguiente manera Si la longitud de la lista es 0 o 1 entonces ya esta ordenada En otro caso Dividir la lista desordenada en dos sublistas de aproximadamente la mitad del tamano 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 ejecucion 1 Una lista pequena necesitara menos pasos para ordenarse que una lista grande 2 Se necesitan menos pasos para construir una lista ordenada a partir de dos listas tambien ordenadas que a partir de dos listas desordenadas Por ejemplo solo sera necesario entrelazar cada lista una vez que estan ordenadas Comparacion con otros algoritmos de ordenamiento EditarAunque heapsort tiene los mismos limites de tiempo que merge sort requiere solo 8 1 espacio auxiliar en lugar del 8 n de merge sort y es a menudo mas rapido en implementaciones practicas Quicksort sin embargo es considerado por mucho como el mas rapido algoritmo de ordenamiento de proposito general En el lado bueno merge sort es un ordenamiento estable paraleliza mejor y es mas eficiente manejando medios secuenciales de acceso lento Merge sort es a menudo la mejor opcion para ordenar una lista enlazada en esta situacion es relativamente facil implementar merge sort de manera que solo requiera 8 1 espacio extra y el mal rendimiento de las listas enlazadas ante el acceso aleatorio hace que otros algoritmos como quicksort den un bajo rendimiento y para otros como heapsort sea algo imposible Para Perl 5 8 merge sort es el algoritmo de ordenamiento por defecto lo era quicksort en versiones anteriores de Perl En Java los metodos de ordenacion de Arrays usan merge sort o una modificacion de quicksort dependiendo de los tipos de datos y por cuestiones de eficiencia cambian a ordenamiento por insercion cuando se estan ordenando menos de siete elementos en el array Referencias Editar Knuth Donald 1998 Section 5 2 4 Sorting by Merging Sorting and Searching The Art of Computer Programming 3 2nd ed Addison Wesley pp 158 168 ISBN 0 201 89685 0 Enlaces externos EditarDistintas implementaciones del algoritmo en Wikibooks ingles Distintas implementaciones del algoritmo en RosettaCode org ingles Bibliotecas Editar Sort Merge Modulo Perl en CPAN File MergeSort Modulo Perl en CPAN Datos Q189057 Multimedia Merge sort Obtenido de https es wikipedia org w index php title Ordenamiento por mezcla amp oldid 140768334, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos