Clasificación de listas de datos presenta uno de los problemas más desafiantes para los informáticos, ya que es difícil de conceptualizar e implementar algoritmos de ordenación eficientes en lenguajes de programación. Clasificación requiere copia considerable, el movimiento y la lectura de datos para trabajar. En consecuencia, los programadores se centran en el desarrollo de algoritmos de ordenación eficientes y genéricos. Una de ellas, la combinación de una especie, funciona dividiendo una lista de valores de una y otra forma recursiva para "dividir y conquistar" el problema. Desde combinación de tipo pretende ser una solución genérica, la mayoría de lenguajes, como Java, tienen sus formas de cumplimiento.
combinar Clase
Una especie de mezcla toma una lista que ser resuelto de forma recursiva y divide la lista hasta llegar a valores individuales, como los números individuales. La especie se recombina a continuación los números en orden clasificado, el tiempo de regresar de una lista ordenada. Una clase de clasificación básica en Java contendrá una lista para ordenar, y llamar a una función principal de combinación de la clasificación se define:
Combinar la clase {
public int [] x;
principales argumentos (String []) {public static void
x = [5, 6, 3, 4, 7, 8, 10, 2];
mergesort (x, 0, x.length-1);
}
}
Combinar Ordenar Función
Fuera de la clase principal residirá una función de combinación tipo. Este segmentos de función de una serie de números para ordenar la lista. Inicialmente, este rango representará a toda la lista, pero a medida que continúa la fusión especie, que tomará sólo la mitad de la lista hasta llegar a las entradas individuales. A continuación, la función de combinación de tipo será recombinar los elementos en grandes listas que se ordenan (Fuente 2):
pública mergesort void (int baja, int hi) {
si (bajo <hi) {
int = media (baja + hi) / 2;
por fusión (bajo, medio);
mergesort (media + 1, hi);
fusionar (baja, media, alta);
}
}
Función de mezcla básica
La función de fusión combinará dos listas después de la clasificación ellos. Si la función recibe los elementos individuales, ordenará ellos. De lo contrario, tendrá dos listas separadas, y en función del deseo del orden programador de forma ascendente o descendente:
de combinación de private void (int baja, int mediados, int hi) {
int [] = new int copiar [x.length-1];
// Copiar ambas partes en la matriz de ayuda
for (int i = baja; i <= hi; i ++) {
La copia [i] = x [i];
}
int i = baja;
Int J = centro + 1;
int k = baja;
while (i <= mediados && j <= hi) {
si (copia [i] <= Copiar [j]) {
x [k] = copiar [i];
i ++;
} Else {
x [k] = copiar [j];
j ++;
}
k ++;
}
// Copiar el resto de la parte izquierda de la matriz en la matriz de destino
while (i <= centro) {
x [k] = copiar [i];
k ++;
i ++;
}
}
Combinar Ordenar Recurse
La función de "ordenación por fusión" se divide de forma recursiva la lista. En primer lugar, se subdivide la lista original a la mitad por cada vez que llama a sí mismo de forma recursiva. Cuando la recursividad llega a un solo dígito, a continuación, la función de marcha atrás y comienza a ordenar la lista. Cada vez que la función da marcha atrás a una llamada a la función anterior, se fusiona dos mitades de una lista más pequeña, con el tiempo de trabajo de nuevo a la lista completa. La función de "fusionar" parece hacer el trabajo pesado por la organización y los valores de copia en la lista, pero el corazón de una especie de combinación está en la función engañosamente simple "por fusión".