Sei sulla pagina 1di 2

Que desarrollado en 1945 por John Von Neumann .

[cita requerida]

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

1. Si la longitud de la lista es 0 1, entonces ya est ordenada. En otro caso:


2. Dividir la lista desordenada en dos sublistas de aproximadamente la mitad del tamao.
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
ejecucin:

1. Una lista pequea necesitar menos pasos para ordenarse que una lista grande.
2. Se necesitan menos pasos para construir una lista ordenada a partir de dos listas tambin
ordenadas, que a partir de dos listas desordenadas. Por ejemplo, slo ser necesario
entrelazar cada lista una vez que estn ordenadas.

A continuacin se describe el algoritmo en pseudocdigo (se advierte de que no se incluyen


casos especiales para vectores vacos, etc.; una implementacin en un lenguaje de programacin
real debera 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
Optimizando merge sort
En los ordenadores modernos, el principio de localidad puede ser primordial en la optimizacin
de software, porque se usan jerarquas de memoria multi-nivel. Se han propuesto versiones de
cache-consciente del algoritmo de ordenacin por mezcla, cuyas operaciones han sido
especficamente escogidas para minimizar el movimiento de entrada y salida de pginas de la
memoria cach de la mquina. Por ejemplo, el algorimo "tiled merge sort" deja de particionar
subarrays cuando se han alcanzado subarrays de tamao S, donde S es el nmero de elementos
que caben en una nica pgina en memoria. Cada uno de esos subarrays se ordenan con un
algorimo de ordenacin in-situ, para evitar intercambios en memoria, y entonces se termina con
el algoritmo de ordenamiento por mezcla en su versin recursiva estndar. Este algoritmo ha
demostrado un mejor rendimiento en mquinas que se benefician de la optimizacin cach.

M.A. Kronrod sugiri en 1969 una versin alternativa del algoritmo de ordenamiento por mezcla
que usaba espacio adicional constante. Este algoritmo fue refinado por Katajainen, Pasanen y
Teuhola.

Comparacin con otros algoritmos de ordenamiento


Aunque heapsort tiene los mismos lmites de tiempo que merge sort, requiere slo (1) espacio
auxiliar en lugar del (n) de merge sort, y es a menudo ms rpido en implementaciones
prcticas. Quicksort, sin embargo, es considerado por mucho como el ms rpido algoritmo de
ordenamiento de propsito general. En el lado bueno, merge sort es un ordenamiento estable,
paraleliza mejor, y es ms eficiente manejando medios secuenciales de acceso lento. Merge sort
es a menudo la mejor opcin para ordenar una lista enlazada: en esta situacin es relativamente
fcil implementar merge sort de manera que slo 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 mtodos de ordenacin de Arrays usan merge sort o
una modificacin de quicksort dependiendo de los tipos de datos y por cuestiones de eficiencia
cambian a ordenamiento por insercin cuando se estn ordenando menos de siete elementos en el
array.

Potrebbero piacerti anche