Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Descripción
Fue 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 Ejemplo de ordenamiento por mezcla.
else
Ordenamiento por mezcla 2
Implementaciones
Perl
sub mergesort {
mergesort_recursivo ($_[0], 0, $#{ $_[0] }); # Recibimos una
referencia a un array
}
sub mergesort_recursivo {
my ( $array, $primero, $ultimo ) = @_;
sub merge {
my ( $array, $primero, $mitad, $ultimo ) = @_;
my $n = $ultimo - $primero + 1;
mitad.
$array->[ $i ] =
$j < $n1
&&
( $k == $n || $work[ $j ] < $work[ $k ] )
? $work[ $j++ ]
: $work[ $k++ ]
;
}
}
C
void combinar(int array[], int inicio, int medio, int fin)
{
int aux[fin-inicio+1];
int indAux, indFst, indSnd;
int i;
while (indFst<=medio)
{
aux[indAux++] = array[indFst++];
}
indAux = 0;
int main()
{
int i, v[11]= {6,7,1,7,8,36,7,4,7,4,4};
mergeSort(v, 0, 10);
C++
// En el código usamos la clase vector (#include <vector.h>) para crear los
vectores,
// obviamente funciona igual de bien si se utilizan los arrays tipo C:
TIPO V[]
template <class T, class U>
Ordenamiento por mezcla 5
Visual Basic
Option Base 1
Sub Merge(N As Integer, ByRef A() As Integer, ini As Integer, med As Integer, fin As Integer)
Dim n1 As Integer
n1 = med - ini + 1
Dim n2 As Integer
n2 = fin - med
ReDim L(n1 + 1) As Integer
ReDim R(n2 + 1) As Integer
For z = 1 To n1
L(z) = A(ini + z - 1)
Next
For z = 1 To n2
R(z) = A(med + z)
Next
L(n1 + 1) = 32767
R(n2 + 1) = 32767
Dim i As Integer
Dim j As Integer
i = 1
j = 1
For k = ini To fin
If L(i) <= R(j) Then
Ordenamiento por mezcla 7
A(k) = L(i)
i = i + 1
ElseIf L(i) > R(j) Then
A(k) = R(j)
j = j + 1
End If
Next
End Sub
Sub MergeSort(N As Integer, ByRef A() As Integer, inicio As Integer, fin As Integer)
If inicio < fin Then
Dim medio As Integer
medio = (inicio + fin) \ 2
MergeSort N, A, inicio, medio
MergeSort N, A, medio + 1, fin
Merge N, A, inicio, medio, fin
End If
End Sub
Java
public class MergeSort{
private int A[];
public int[] OrdenaMerge(int[] L) {
int n = L.length;
if (n > 1){
int m = (int) (Math.ceil(n/2.0));
int [] L1 = new int[m];
int [] L2 = new int[n-m];
C Sharp
public static class Algoritmos<T>
if (lista.Count > 1)
lista1.Add(lista[i]);
else
lista2.Add(lista[i]);
lista1 = MergeSort(lista1);
lista2 = MergeSort(lista2);
else
return lista;
(lista2.Count - 1);
listaSalida.Add(lista1[p1]);
Ordenamiento por mezcla 10
p1++;
else
listaSalida.Add(lista2[p2]);
p2++;
return listaSalida;
Prolog
mergesort([],[]). %caso base
mergesort([X],[X]). %caso base
mergesort(XS,YS):-
divide(XS,LS,MS), %divido
mergesort(LS,KS), %ordeno una parte
mergesort(MS,NS), %ordeno la otra parte
mezcla(KS,NS,YS). %mezclo
coge(1,1,[X|_],[X]).
coge(N,M,[_|XS],NS):- %avanzo a la posicion
N>1,
L is N-1,
D is M-1,
coge(L,D,XS,NS).
divide([X],[X],[]).
divide(XS,YS,ZS):-
longitud(XS,P),
L is P//2,
L1 is L+1,
coge(1,L,XS,YS),
coge(L1,P,XS,ZS).
mezcla(XS,[],XS).
Ordenamiento por mezcla 11
mezcla([],XS,XS).
mezcla([X|XS],[Y|YS],[X|ZS]):-
X<Y,
mezcla(XS,[Y|YS],ZS).
mezcla([X|XS],[Y|YS],[Y|ZS]):-
X>=Y,
mezcla([X|XS],YS,ZS).
longitud([],0).
longitud([_|Cola],N):-longitud(Cola,N1),N is N1+1.
Python
def mergeSort (numbers):
def merge (first, second):
mergedList = []
else:
mergedList.append(second.pop(0))
mergedList += first
mergedList += second
return mergedList
middle = len(numbers) // 2
first = mergeSort(numbers[0:middle])
second = mergeSort(numbers[middle:])
recursiva estándar. Este algoritmo ha demostrado un mejor rendimiento en máquinas que se benefician de la
optimización caché.
M.A. Kronrod sugirió en 1969 una versión alternativa del algoritmo de ordenamiento por mezcla que usaba espacio
adicional constante. Este algoritmo fue refinado por Katajainen, Pasanen y Teuhola.
Enlaces externos
Implementaciones
• Sort::Merge [1] Módulo Perl en CPAN
• File::MergeSort [2] Módulo Perl en CPAN
Referencias
[1] http:/ / search. cpan. org/ perldoc?Sort::Merge
[2] http:/ / search. cpan. org/ perldoc?File::MergeSort
Fuentes y contribuyentes del artículo 13
Licencia
Creative Commons Attribution-Share Alike 3.0
//creativecommons.org/licenses/by-sa/3.0/