Fusionar la clasificación significa clasificar dividiendo y conquistar:
(1) Divida una matriz en dos pequeñas matrices y ordenelas por separado;
(2) luego fusione las matrices separadas de órdenes bien ordenadas;
La copia del código es la siguiente:
import java.util.scanner;
clase pública Mergesort {
int [] a = nulo;
int [] b = nulo;
int n;
Escáner sin = nulo;
Mergesort ()
{
a = nuevo int [10000];
b = nuevo int [10000];
sen = nuevo escáner (system.in);
}
sort void (int inicio, int end) // ordenar a [inicio ... end]
{
int Mid;
if (start> = end) // Cuando solo hay un elemento, regrese directamente
devolver ;
demás
{
Mid = (endsart)/2;
ordenar (comenzar, comenzar+Mid);
ordenar (inicio+mediano+1, final);
// Combine dos matrices ordenadas a [Inicio ... Inicio+Mid] y un [Inicio+Mid+1 ... Fin]
fusionar (inicio, inicio+medio, final);
}
}
Void Merge (Int Start, Int Mid, Int End) // Combinación
{
int t = inicio;
int i = inicio, j = Mid+1;
while (i <= mid && j <= end)
{
if (a [i] <a [j])
b [t ++] = a [i ++];
demás
b [t ++] = a [j ++];
}
mientras (i <= Mid)
b [t ++] = a [i ++];
mientras (j <= end)
b [t ++] = a [j ++];
para (i = inicio; i <= end; i ++) // Escriba el contenido ordenado nuevamente a la posición correspondiente de la matriz a
a [i] = b [i];
}
run void ()
{
System.out.print ("Ingrese el número de números a ordenar:");
n = sin.nextint ();
para (int i = 0; i <n; i ++)
a [i] = sin.nextInt ();
ordenar (0, n-1);
System.out.println ("El resultado de clasificación es:");
// Ingrese los datos a ordenar
para (int i = 0; i <n; i ++)
System.out.println (a [i]+"");
}
public static void main (string [] args) {
nuevo Mergesort (). Run ();
}
}