Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
[cita requerida]
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.
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.
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.