domingo, 22 de julio de 2012

Metodo de Ordenacion por Seleccion Directa

Hola chicos, en esta ocasion quiero ayudarles a comprender mejor el funcionamiento de este metodo. Quiero aclarar que esto es un complemento y de ninguna manera es la mejor forma de aprenderlo, pero si tienen un ramo de Estructura de Datos esto les servira.

Este metodo funciona de la siguiente manera. Se toma el menor elemento del arreglo y se compara con n - 1 y n - 2 y asi sucesivamente.

Ejemplo

Supongamos que tenemos un arreglo de 5 elementos en la que a es el arreglo.
 {i, menor, k, j son variables de tipo entero}

a = {2, 8, 3, 1, 9}
PRIMERA PASADA

Se realiza la siguiente asignacion: menor <- a[1](2)
(a[2] < menor) (8 < 2) No se cumple la condicion
(a[3] < menor) (3 < 2) No se cumple la condicion
(a[4] < menor) (1 < 2) Se cumple la condicion
menor <- a[4](1)
(a[5] < menor) (9 < 1) No se cumple la condicion
Despues de esta pasada el arreglo queda asi:
a = {1, 8, 3, 2, 9}
SEGUNDA PASADA

Se realiza la siguiente asignacion: menor <- a[2](8)
(a[3] < menor) (3 < 8) Se cumple la condicion
menor <- a[3](3)
(a[4] < menor) (2 < 3) Se cumple la condicion
menor <- a[4](2)
(a[5] < menor) (9 < 2) No se cumple la condicion
Despues de esta pasada el arreglo queda asi:
 a = {1, 2, 8, 3, 9}
TERCERA PASADA


Se realiza la siguiente asignacion: menor <- a[3](8)
(a[4] < menor) (3 < 8) Se cumple la condicion
menor <- a[4](3)
(a[5] < menor) (9 < 3) No se cumple la condicion
Despues de esta pasada el arreglo queda asi:
a = {1, 2, 3, 8, 9}
Como ven hicieron falta solo 3 pasadas para ordenar un arreglo de 5 elementos, esto claramente puede variar pero siempre sera mas efectivo que el metodo de ordenacion por insercion u ordenacion por intercambio directo(burbuja), en los que explicare en otra oportunidad. Siempre es bueno conocer los otros metodos independiente de su efectiva ya que de esta forma comprendemos mejor lo que se esta haciendo.

Algoritmo
Para i<-1 Hasta n-1 Hacer

    menor <- a[i];
    k <- i;

    Para j<-i+1 Hasta n Hacer

        Si a[j] < menor Entonces

            menor <- a[j];
            k <- j;
        FinSi
    FinPara

    a[k] <- a[i];
    a[i] <- menor;
FinPara
Como ven es un algoritmo muy simple pero bastante eficaz y facil de comprender.

No hay comentarios:

Publicar un comentario