AYUDA metodo de ordenamiento selccion

Iniciado por lecxe, 18 Diciembre 2011, 20:38 PM

0 Miembros y 1 Visitante están viendo este tema.

lecxe

 holaa un saludo para esta comunidad. bueno soy nuevo por aca y andaba tratando de entener metodo de seleccion, busque en internet algunos algoritmos encontre uno basico creo, pero ese pos_men no se que hondaa, nadamas habia trabajado con burbuja, pero este es nuevo para mii. cualquier ayuda para hacer correr el algoritmo Gracias!

void seleccion (int arreglo[], int TAM)
{
     int i;
     int temp, pos_men;
 
     for (i=0; i<TAM - 1; i++)
          {
          /* Buscamos el elemento menor */
          pos_men = menor(arreglo, i, TAM);
          /* coloca donde corresponde */
          temp = arreglo;
          arreglo = arreglo [pos_men];
          arreglo [pos_men] = temp;
          }
}

int menor (int arreglo[], int desde, int TAM)
{
     int i, menor;
 
     menor = desde++;
     for (i=desde; i<TAM; i++)
          if (arreglo < arreglo[menor])
               menor = i;
 
     return menor;
}




:rolleyes:

naderST


eltongabinghiman

La idea del Selection Sort es ordenar un arreglo, manteniendo el arreglo ordenado del lado izquierdo, y el desordenado del lado derecho (o como más te guste).

A medida que el algoritmo avanza, el tamaño de la parte ordenada va creciendo, y el de la parte desordenada decreciendo.

Un seudocódigo podría ser el siguiente:


SelectionSort( array desordenado, largo de array ) -> array ordenado
   desde i=0 a (largo-2)
        pos_men = menor(array, i) // posicion del elemento con menor valor desde i
        intercambiar(pos_men,i)
   fin-desde


Como verás se busca el elemento más chico (se guarda su posición en pos_men) y se inserta en el primer lugar, luego entre los que quedan por ordenar se busca el más chico y se inserta en el segundo lugar, así hasta el anteúltimo elemento. El último elemento quedará automáticamente ordenado en su lugar.

Si N es el largo del array, para insertar el primer elemento se hacen N-1 comparaciones, para el segundo N-2 y así sucesivamente hasta 1.

Por lo que en total se hacen (N-1 + N-2 + N-3 +...+ 2 + 1) comparaciones, o lo que es lo mismo la sumatoria de los primero N-1 naturales, cuyo valor es:

N(N-1)/2

Espero se haya entendido.

Saludos.