lunes, 10 de mayo de 2010

Ordenamiento Quick short

Primero que todo vean la animación
El método quick short:


El método quick short es quizás el mas eficas pero algo mas lento que los demas ya que se basa en rutinas iterativas como recursivas.
Si vamos bien con la lectura las iterativas son mas rapidas y consumen menos cpu que las recursivas.

Les traigo un ejemplo sencillo de como implementarla. Pero antes revisemos algo
si bien para ver si un elemento es mayor y tomar una decision al respecto usamos comunmente un if.
Por ejemplo si usamos esto:
 if variable == variable1 { variable+1} else { variable}
Notamos que se hace una comparacion y se toma una desicion pero existe una forma mas rapida y diferente que es:
variable == variable1 ? variable+1: variable
Que es exactamente lo mismo solo de diferente modo.


package animacionconlineasenjava;

/**
 *
 * @author JONATHAN
 */
public class metodoquickshort{

    public static void main(String a[]) {
        int i;
        int array[] = {121, 9, 4, 99, 120, 1, 3, 10, 130};
        System.out.print("       Quick Sort\n\n");
        System.out.print("Valores antes del sort:\n");
        for (i = 0; i < array.length; i++) {
            System.out.print(array[i] + "  ");
        }
        quick_short(array, 0, array.length - 1);
        System.out.println();
        System.out.print("Valores despues del sort:\n");
        for (i = 0; i < array.length; i++) {
            System.out.print(array[i] + "  ");
        }
        System.out.println();
    }

    public static void quick_short(int array[], int low, int n) {
        int bajo = low;
        int alto = n;
        if (bajo >= n) {
            return;
        }
        int mitad = array[(bajo + alto) / 2];
        while (bajo < alto) {
            while (bajo < alto && array[bajo] < mitad) {//jugamos con cada mitad
                bajo++;
            }
            while (bajo < alto && array[alto] > mitad) {//jugamos con cada mitad
                alto--;
            }
            if (bajo < alto) {//aca ocurre lo que se ve en la animacion con las 2 flechas y los saltos
                int T = array[bajo];
                array[bajo] = array[alto];
                array[alto] = T;
            }
        }
        if (alto < bajo) {//aca ocurre lo que se ve en la animacion con las 2 flechas y los saltos
            int T = alto;
            alto = bajo;
            bajo = T;
        }
        quick_short(array, low, bajo);
        quick_short(array, bajo == low ? bajo + 1 : bajo, n);//aca esta lo explicado anteriormente en una sola linea
    }
}

Ahora una aplicación practica aquí
Reacciones:

2 comentarios:

  1. NOOOOOOOOOO FUNCIONA POR FAVOR REVISAR

    ResponderEliminar
  2. Especifique en que linea ocurre lo que ud. dice que no funciona caso contrario no puedo ayudar en mucho el algoritmo esta limpio

    ResponderEliminar