Clasificación de listas de datos se presenta uno de los problemas más difíciles para los programadores , ya que es difícil de conceptualizar e implementar algoritmos de ordenación eficientes en lenguajes de programación . Clasificación requiere considerable copiar, mover y lectura de datos para trabajar . En consecuencia , los programadores se centran en el desarrollo de algoritmos de ordenación eficientes y genérico . Uno de ellos, el tipo de combinación , trabaja dividiendo una lista de valores de una y otra forma recursiva para " dividir y conquistar " el problema. Como una especie de combinación está pensado como una solución genérica , la mayoría de los lenguajes , como Java , tienen maneras de implementarlo. Combinar Clase
Una fusión especie tiene una lista para ser ordenados y recursiva divide la lista hasta llegar a valores individuales , como los números individuales. La especie se recombina los números de forma ordenada , el tiempo de regresar una lista ordenada . Una clase de la clasificación básica en Java que contendrá una lista para ordenar, y llamar a una función principal de combinación de clasificación que define :
clase
Merge {
public int [ ] x;
public static void main ( String [] args ) {
x = [ 5 , 6 , 3 , 4 , 7 , 8 , 10 , 2 ] ;
mergesort (x, 0 , x . length-1 ) ;
} }
Merge Ordenar función
Fuera de la clase principal residirá una función de ordenación de combinación. Esta función segmentos de un rango de números para ordenar la lista. Inicialmente , esta gama representará toda la lista, pero como el tipo de mezcla continua , tendrá sólo la mitad de la lista hasta llegar a las entradas individuales. Entonces , la función de clasificación de combinación se recombinar los elementos en grandes listas que se ordenan (Fuente 2 ) :
public void mergesort (bajo int , int hi ) {
if ( bajo < hi ) { int medio = (bajo + alta ) /2 ; mergesort (bajo, medio) ; mergesort ( media + 1 , hi ), merge (baja, media, alta ) ;} }
< br > Basic Merge función
La función de fusión combinará dos listas después de clasificarlos . Si la función recibe los elementos individuales , ordenará ellos. De lo contrario, tendrá dos listas separadas , y en función de los deseos de la orden del programador en orden ascendente o descendente :
private void combinación ( int , int media baja , int hi ) {
< p > int [ ] = new int copia [ x.length - 1 ] ;
//Copiar las dos partes en la matriz helper for (int i = Baja ; i < = hi , i + + ) { copia [ i ] = x [ i ] ;}
int i = Baja ; int j = media + 1 ; int k = bajo ; while ( i < = mediados && j < = hi ) {if ( copia [ i ] < = copia [ j ] ) { x [ k ] = copia [ i]; i + + ;} else { x [ k ] = copia [ j ], j + + ;} k + + ;} //Copiar el resto del lado izquierdo de la matriz en la matriz de destino while ( i < = centro ) { x [ k ] = copia [ i ], k + + , i + + ;} }
< br > Combinar Ordenar Recurse
la función " mergesort " divide de forma recursiva la lista. En primer lugar , se subdivide la lista original en medio de cada vez que se llama a sí mismo de forma recursiva. Cuando la recursividad alcanza un solo dígito , la función y luego retrocede 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 une las dos mitades de una lista más pequeña , con el tiempo de trabajo de nuevo a la lista completa. La función " merge " parece hacer todo el trabajo por la organización y la copia de los valores en la lista, pero el corazón de una fusión especie se encuentra en la función engañosamente simple " mergesort " .
< Br >