Mezcla Natural (Metodos de Ordenamiento) [Programación]


public class Mezcla
{
    public void Mezcla()
    {
   
    int A[], f=0;
    f=Integer.parseInt(JOptionPane.showInputDialog(null, "Total de numeros a ordenar?"));
    A=new int [f];
    for(int i=0; i<f; i++)
    {
        A[i]=Integer.parseInt(JOptionPane.showInputDialog(null, "Introduce numero:"));
    }
    mergeSort (A,0,A.length-1);

    String c="";
    for (int i=0;i<A.length;i++)
    {
        c=c+"Ordenados son:"+A[i]+"\n";
    }
    JOptionPane.showMessageDialog(null, c);
}
    void mergeSort (int A[], int bajo, int alto)
    {
        if (bajo < alto) //Si hay más de un elemento
        {
            int medio = (alto + bajo)/2;
            mergeSort (A, bajo, medio); //Llamada recursiva con la mitad de los elementos
            mergeSort (A, medio+1, alto); //Llamada recursiva con la otra mitad de los elementos
            merge (A, bajo, medio+1, alto);//Procedimiento que mezcla el resultado de las dos llamadas anteriores
        }
    }
    void merge (int A[], int bajo, int bajo_2, int alto)
    {
        int i = bajo;//Variable de primer elemento de la primera subsecuencia
        int finbajo = bajo_2 -1; //Variable del último elemento de la primera subsecuencia
        int j = bajo_2;//Variable del primer elemento de la segunda subsecuencia
        int k = bajo; // posicion del temporal

/*Se introducen en un array Temporal los elementos ordenados
de las dos subsecuencias, hasta el momento en que una de las
subsecuencias ya tiene todos los elementos ordenados*/

        int Temp[]=new int [ A.length];
        while (( i <= finbajo) && (j<= alto))
        {
            if (A[i] <= A[j])
            Temp[k++] = A[i++];
            else
            Temp[k++] = A[j++];
        }
        while (i <= finbajo) //Si se agotaron todos los elementos de la segunda subsecuencia
        Temp[k++] = A[i++];
        while (j <= alto) //Si se agotaron los de la primera subsecuencia
        Temp[k++] = A[j++];

//Paso todos los elementos del Temporal al vector
        for (i = bajo; i <= alto; i++)
        A[i] = Temp[i];
    }

    public static void main(String args[])
    {
        Mezcla  o= new Mezcla();
        o.Mezcla();
    }
Compartir es Gratis:


0 Comentarios:

Back to Top