miércoles, 21 de enero de 2015

Metodos Iterativos

Método de Burbuja

El método de la burbuja es uno de los más simples, es tan fácil como comparar todos los elementos de una lista contra todos, si se cumple que uno es mayor o menor a otro, entonces los intercambia de posición.
Por ejemplo, imaginemos que tenemos los siguientes valores:

5
6
1
0
3

Lo que haría una burbuja simple, seria comenzar recorriendo los valores de izq.  a derecha, comenzando por el 5. Lo compara con el 6, con el 1, con el 0 y con el 3, si es mayor o menor (dependiendo si el orden es ascendente o descendente) se intercambian de posición. Luego continua con el siguiente, con el 6, y lo compara con todos los elementos de la lista, esperando ver si se cumple o no la misma condición que con el primer elemento. Así, sucesivamente, hasta el último elemento de la lista.

La estructura de este método es la siguiente:

 for (i=1; i<LIMITE; i++){
     for j=0 ; j<LIMITE - 1; j++){
         if (vector[j] > vector[j+1]){
             temp = vector[j];
             vector[j] = vector[j+1];
             vector[j+1] = temp;
         }
    }
}


Métodos de Inserción y Selección

El bucle principal de la ordenación por inserción va examinando sucesivamente todos los elementos de la matriz desde el segundo hasta el n-ésimo, e inserta cada uno en el lugar adecuado entre sus predecesores dentro de la matriz.

La ordenación por selección funciona seleccionando el menor elemento de la matriz y llevándolo al principio; a continuación selecciona el siguiente menor y lo pone en la segunda posición de la matriz y así sucesivamente.

La estructura de estos métodos es la siguiente:

Insercion(int matrix[]){
    int i, temp, j;
    for (i = 1; i < matrix.length; i++){
        temp = matrix[i];
        j = i - 1;
        while ( (matrix[j] > temp) && (j >= 0) ){
            matrix[j + 1] = matrix[j];
            j--;
        }
        matrix[j + 1] = temp;
    }
}


Seleccion(int[]matrix){
    int i, j, k, p, buffer, limit = matrix.length-1;
    for(k = 0; k < limit; k++){
        p = k;
        for(i = k+1; i <= limit; i++)
            if(matrix[i] < matrix[p]) p = i;
                if(p != k){
                    buffer = matrix[p];
                    matrix[p] = matrix[k];
                    matrix[k] = buffer;
                }
            }
         }

El bucle principal de la ordenación por inserción va examinando sucesivamente todos los elementos de la matriz desde el segundo hasta el n-ésimo, e inserta cada uno en el lugar adecuado entre sus predecesores dentro de la matriz.

La ordenación por selección funciona seleccionando el menor elemento de la matriz y llevándolo al principio; a continuación selecciona el siguiente menor y lo pone en la segunda posición de la matriz y así sucesivamente.



Método Shell Short


Este método es una mejora del algoritmo de ordenamiento por Inserción (Insertsort).

Si tenemos en cuenta que el ordenamiento por inserción es mucho más eficiente si nuestra lista de números esta semi-ordenada y que desplaza un valor una única posición a la vez.

Durante la ejecución de este algoritmo, los números de la lista se van casi-ordenando y finalmente, el último paso o función de este algoritmo es un simple método por inserción que, al estar casi-ordenados los números, es más eficiente.


El algoritmo de este método es el siguiente:

public void shellSort(int[] matrix) {
    for ( int increment = matrix.length / 2; increment > 0; increment =
    (increment == 2 ? 1 : (int) Math.round(increment / 2.2)))
    {
            for (int i = increment; i < matrix.length; i++)
        {
                for (int j = i; j >= increment && matrix[j - increment] >
                matrix[j]; j -= increment)
            {
                     int temp = matrix[j];
                     matrix[j] = matrix[j - increment];
                     matrix[j - increment] = temp;
            }
        }
    }
}


No hay comentarios:

Publicar un comentario