Métodos de ordenamiento hecho en java

Estos métodos de ordenamiento fueron implementados en mi curso de Estructura de datos y algoritmos

La clase principal es DemoOrdenamiento.java

Los métodos de ordenamiento que incluyen son:

Burbuja Derecha – Izquierda
Burbuja Izquierda – Derecha
Inserción Directa
Selección Directa
Método Shell
Ordenamiento rápido

Todos estas clases deberìan estar incluidos en el mismo proyecto o en la misma carpeta desde donde se manda la orden al compilador, yo les he probado compilando con gcj y jdk en linux. En el curso usamos una IDE el JCreator sobre windows, espero les sirva.

//ArregloUni.java

public class ArregloUni {
    protected static int MAX = 20;
    protected int n;
    protected int[] a = new int[MAX];

    public int cantidad() {
        return n;
    }

    public void ingreso() {
        int i, cant;

        do {
            System.out.print("Cuantos elementos: ");
            cant = Leer.datoInt();
        } while (cant < 1 || cant > MAX);
        for (i = 0; cant > i; i++) {
            System.out.print("elemento " + i + ":");
            a[i] = Leer.datoInt();
        }
        n = cant;
    }

    public void reporte() {
        int i;

        if (n > 0) {
            for (i = 0; n > i; i++)
                System.out.print(a[i] + "\t");
            System.out.println("\n");
        } else
            System.out.println("Esta Vacio");
    }

    public int localizar(int x) {
        int i = 0;
        if (n > 0) {
            while (i < n - 1 && x != a[i])
                i++;
            if (x == a[i])
                return i; // Esta en posición i
            else
                return -1; // No se encuentra
        } else
            return -2; // Esta vacia
    }

    public void insertar(int x, int pos) {
        int i;

        if (n > 0 && n != MAX) {
            for (i = n - 1; pos <= i; i--)
                a[i + 1] = a[i];
            a[pos] = x;
            n = n + 1;
        } else if (n > 0)
            System.out.println("Desbordamiento");
        else
            System.out.println("Esta vacio");
    }

    public void suprimir(int pos) {
        int i;

        if (n > 0) {
            for (i = pos; n - 1 > i; i++)
                a[i] = a[i + 1];
            n = n - 1;
        } else
            System.out.println("Esta vacio");
    }
}
//DemoOrdenamiento.java

public class DemoOrdenamiento {
    public static void main(String[] args) {
        Ordenamiento datos = new Ordenamiento();
        int sw, opcion;

        datos.ingreso();
        sw = 1;
        do {
            System.out.println("0. Salir");
            System.out.println("1. Burbuja Derecha Izquierda");
            System.out.println("2. Burbuja de derecha a Izquierda");
            System.out.println("3. Inserción Directa");
            System.out.println("4. Selección Directa");
            System.out.println("5. Método Shell");
            System.out.println("6. Ordenamiento rápido");
            System.out.print("Opción ==> ");
            opcion = Leer.datoInt();
            if (opcion > 0) {
                System.out.println("Arreglo antes de ordenar");
                datos.reporte();
            }

            switch (opcion) {
                case 0:
                    sw = 0;
                    break;
                case 1:
                    datos.burbuja_der_izq();
                    break;
                case 2:
                    datos.burbuja_izq_der();
                    break;
                case 3:
                    datos.baraja();
                    break;
                case 4:
                    datos.seleccion_directa();
                    break;
                case 5:
                    datos.shell();
                    break;
                case 6:
                    datos.quicksort(datos.a, 0, datos.n - 1);
                    break;
            }

            if (opcion > 0) {
                System.out.println("Arreglo después de ordenar");
                datos.reporte();
            }

        } while (sw == 1);
    }
}
//Leer.java

import java.io.*;

public class Leer {
    public static String dato() {
        String sdato = "";
        try {
            // Definir un flujo de caracteres de entrada: flujoE
            InputStreamReader isr = new InputStreamReader(System.in);
            BufferedReader flujoE = new BufferedReader(isr);
            // Leer. La entrada finaliza al pulsar la tecla Entrar
            sdato = flujoE.readLine();
        } catch (IOException e) {
            System.err.println("Error: " + e.getMessage());
        }
        return sdato; // devolver el dato tecleado
    }

    public static short datoShort() {
        try {
            return Short.parseShort(dato());
        } catch (NumberFormatException e) {
            // valor más pequeño
            return Short.MIN_VALUE;
        }
    }

    public static int datoInt() {
        try {
            return Integer.parseInt(dato());
        } catch (NumberFormatException e) {
            // valor más pequeño
            return Integer.MIN_VALUE;
        }
    }

    public static long datoLong() {
        try {
            return Long.parseLong(dato());
        } catch (NumberFormatException e) {
            // valor más pequeño
            return Long.MIN_VALUE;
        }
    }

    public static float datoFloat() {
        try {
            Float f = new Float(dato());
            return f.floatValue();
        } catch (NumberFormatException e) {
            // No es un Número; valor float.
            return Float.NaN;
        }
    }

    public static double datoDouble() {
        try {
            Double d = new Double(dato());
            return d.doubleValue();
        } catch (NumberFormatException e) {
            // No es un Número; valor double.
            return Double.NaN;
        }
    }

    public static String datoString() {
        return dato();
    }

    public static char datoChar() {
        int c = 0;
        try {
            InputStreamReader isr = new InputStreamReader(System.in);
            BufferedReader flujoE = new BufferedReader(isr);
            c = flujoE.read();
            char car;
            car = (char) c;
            return car;
        } catch (IOException e) {
            return '\0';
        }
    }
}
//Ordenamiento.java

public class Ordenamiento extends ArregloUni {
    public void burbuja_der_izq() {
        int i, j;
        for (i = 1; i <= n - 1; i++) {
            System.out.println("Recorrido" + i);
            for (j = n - 1; j >= i; j--) {
                if (a[j - 1] > a[j])
                    cambio(a, j - 1, j);
                reporte();
            }
        }
    }

    public void burbuja_izq_der() {
        int i, j;
        for (i = n - 2; i >= 0; i--) {
            System.out.println("Recorrido" + -((i - n) + 1));
            for (j = 0; j <= i; j++) {
                if (a[j] > a[j + 1])
                    cambio(a, j, j + 1);
                reporte();
            }
        }
    }

    public void cambio(int[] a, int pos1, int pos2) {
        int t;
        t = a[pos1];
        a[pos1] = a[pos2];
        a[pos2] = t;
    }

    public void baraja() {
        int i, j, aux;
        for (i = 1; i <= n - 1; i++) {
            aux = a[i];
            j = i - 1;
            while (a[j] > aux && j > 0) {
                a[j + 1] = a[j];
                j--;
            }

            if (a[j] > aux) {
                a[j + 1] = a[j];
                a[j] = aux;
            } else
                a[j + 1] = aux;
        }
    }

    public void seleccion_directa() {
        int i, j, k, aux;
        for (i = 0; i <= n - 2; i++) {
            k = 1;
            aux = a[i];
            for (j = i + 1; j <= n - 1; j++)
                if (a[j] < aux) {
                    k = j;
                    k = a[j];
                }

            a[k] = a[i];
            a[i] = aux;
        }
    }

    public void shell() {
        int d, i, sw;
        d = n;
        do {
            d = d / 2;
            do {
                sw = 0;
                i = -1;
                do {
                    i++;
                    if (a[i] > a[i + d]) {
                        cambio(a, i, i + d);
                        sw = 1;
                    }
                } while (i + d != n - 1);
            } while (sw != 0);
        } while (d != 1);
    }

   public void quicksort(int data[], int inf, int sup) {
    int left = inf;
    int right = sup;
    int pivot = data[(inf + sup) / 2]; // Elemento pivote

    while (left <= right) {
        while (data[left] < pivot) // Encontrar elemento mayor en la izquierda
            left++;
        
        while (data[right] > pivot) // Encontrar elemento menor en la derecha
            right--;

        if (left <= right) {
            // Intercambiar elementos
            int temp = data[left];
            data[left] = data[right];
            data[right] = temp;

            left++;
            right--;
        }
    }

    // Llamadas recursivas para ordenar las particiones
    if (inf < right)
        quicksort(data, inf, right);
    if (left < sup)
        quicksort(data, left, sup);
   }
}

Pueder ir al artículo principal:

Códigos Sencillos hechos en Java

68 thoughts on “Métodos de ordenamiento hecho en java

  1. quiero los metodos de la burbuja radix shell sort quick sort enviamelo a mi correo de fabor y se los voy agradecer y quiero el menu porfavor espero una respuesta muy pronta

  2. oye me tira un overflow en el quicksort la neta no se que onda segun yo escribi todo tal y como esta, paro necesito analizar ese codigo y aprenderlo,

  3. Quiero que me ayudes con un ejercicio de ordenamiento de un vector por el metodo lineal. en java del lenguaje NETBEANS….

  4. Amigos buenas noches, ando en busca de este método de ordenamiento en Java(“Natural Merge Sort”), si alguien lo tuviera y me hiciera el favor de compartirme lo se lo agradecería mucho.

  5. Muy buen código.
    Me gustaría que me pasaras los estilos que usas para meter el código fuente…si es posible claro, también uso wordpress y estoy buscando el estilo adecuado. El que usas me gusta.
    Gracias

  6. no me quiere salir un ejercicio es de polimorfismo se me pone un poco complicado no se si me puedes dar algunos ejemplos sobre polimorfismo si fueras tan amable

  7. public void seleccion_directa()
    {
    int i,j,k,aux;
    for(i=0;i<=n-2;i++)
    {
    k=1;
    aux=a[i];
    for(j=i+1;j<=n-1;j++)
    if(a[j]<aux)
    {
    k=j;
    k=a[j];
    }
    a[k]=a[i];
    a[i]=aux;
    }
    }
    Oie disculpa me puedes decir q significan las variables en este metodo de ordenamiento??

  8. Tengo un problema. cuando selecciono por ejemplo [1] en el teclado me manda nuevamente el menu de opciones y asi sucesivamente se cicla en el menu,,alguien tiene la solucion?? xfis. gracias un saludo

  9. estoy buscan un programa, q me de todos los metodos de ordenamiento, un random, q imprima 100 digitos, utilizando:
    burbuja
    shellshort
    radix
    quickshort
    mescla natural
    hash
    por favor!! gracias

  10. hola, hoye me podrias ayudar esk necesito hacer el ordenamiento burbuja en java pero con hilos, pero no tengo la menor idea de como hacerlo. Me salvarias la vida. Gracias

  11. hola:

    necesito ayuda, tengo que utilizar el metodo burbuja en java para ordenar solo las filas de una matriz n x n, la dimencion debe ser introducida desde teclado y tambien los datos numericos de la matriz y no tengo ni idea de como hacer esta tarea.
    AYUDA, AYUDA POR FAVOR

  12. oye sera k me puedas ayudar con ejemplos de metodos de ordenamiento:
    por emnumeracion
    por insercion
    por intercambio
    por seleccion
    por combinacion
    te juro k me salvarias la vida XD

  13. Necesito, que de llos metodos de ordenamiento rapido y radix lo que esta a continuación
    • Características fundamentales.
    • Ventajas y limitaciones.
    • Escenarios de uso más adecuados.
    • Ejemplos de utilización.
    • Análisis de complejidad del algoritmo correspondiente.
    saludos

  14. Necesito, que de llos metodos de ordenamiento rapido y radix lo que esta a continuación
    • Características fundamentales.
    • Ventajas y limitaciones.
    • Escenarios de uso más adecuados.
    • Ejemplos de utilización.
    • Análisis de complejidad del algoritmo correspondiente.

  15. hola necesito ayuda con este programa es

    dado un array de 7 posiciones tipo int llenarlo desde teclado. Intercambiar el contenido del array.

    este ejercicio es un vector y debe realizarce por el metodo de la burbuja

  16. compa me sirvio mucho tu programa pero el quicksort me da error asi tal cual como esta sin modificarle nada.. y realmente no lo se modificar porq no lo entiendo bien a ver si me podrias ayudar o alguien que sepa gracias de igual forma

  17. HI, fue de mucha ayuda pero tengo un problema con el caso 4 (seleccion directa), cuando meto los datos este me cambia uno de los numeros y no me los ordena….. me ayudan????

  18. un pequeño problema jeje no esta lo que busco, si alguin lo sabe lo puede publicar porfavor es sobre el metodo de la burbuja jeje grasias es ej java

  19. jhoset:
    creo que está claro lo que publico en este post, son métodos de ordenamiendo en java!!!
    Descarga los 4 primeros códigos, ellos funcionan juntos…

    Puedes ejecutarlo desde la IDE que quieras, incluyendo netbeans. Los metodos que contiene son:

    Burbuja Derecha – Izquierda
    Burbuja Izquierda – Derecha
    Inserción Directa
    Selección Directa
    Método Shell
    Ordenamiento rápido

    Saludos y suerte!!

  20. hola expetos, antes que nada les doy las gracias por prestar mi antencion, quisiera saber si alguien me pueda brindar algunos metodos de ordenamiento en java netbeans, aparte de la burbuja.. ante mano se los agradesco por su colaboracion

  21. me tiro este error el principal estoy trabajando con el texpad bajo windows xp

    C:\Documents and Settings\laboratorio\Escritorio\metodos de ordenamiento\DemoOrdenamiento.java:20: cannot find symbol
    symbol : variable leer
    location: class DemoOrdenamiento
    opcion=leer.datoInt();
    ^
    .\ArregloUni.java:15: cannot find symbol
    symbol : variable Leer
    location: class ArregloUni
    cant=Leer.datoInt();
    ^
    .\ArregloUni.java:19: cannot find symbol
    symbol : variable Leer
    location: class ArregloUni
    a[i]=Leer.datoInt();
    ^
    3 errors

    Tool completed with exit code 1

Deja un comentario