Algoritmos de ordenación en Java. Método de Ordenación por Selección.

El método de ordenación por selección consiste en repetir los siguientes pasos:
Se busca el elemento más pequeño del array y se coloca en la primera posición.
Entre los restantes, se busca el elemento más pequeño y se coloca en la segunda posición.
Entre los restantes se busca el elemento más pequeño y se coloca en la tercera posición.
……..
Este proceso se repite hasta colocar el último elemento.
De forma gráfica el proceso sería el siguiente:
Array original a ordenar: [50, 26, 7, 9, 15, 27]














El método de ordenación por selección en java para ordenar un array de enteros A es el siguiente:

//método java de ordenación por selección
public static void seleccion(int A[]) {
          int i, j, menor, pos, tmp;
          for (i = 0; i < A.length - 1; i++) { // tomamos como menor el primero
                menor = A[i]; // de los elementos que quedan por ordenar
                pos = i; // y guardamos su posición
                for (j = i + 1; j < A.length; j++){ // buscamos en el resto
                      if (A[j] < menor) { // del array algún elemento
                          menor = A[j]; // menor que el actual
                          pos = j;
                      }
                }
                if (pos != i){ // si hay alguno menor se intercambia
                    tmp = A[i];
                    A[i] = A[pos];
                    A[pos] = tmp;
                }
          }
}
  

El tiempo de ejecución del algoritmo de ordenación por selección es del orden O(n2)


20 comentarios:

  1. Me alegro de que te haya sido útil. Gracias

    ResponderEliminar
  2. Me sirvio de mucho tengo una pregunta como seria si en lugar de uzar arrays, necesito el metodo pero con LISTAS DOBLEMENTE ENLAZADAS

    ResponderEliminar
  3. muchas gracias me sirvio

    ResponderEliminar
  4. no me sirvio marca muchos errores,,,,,,

    ResponderEliminar
    Respuestas
    1. import java.util.Scanner;

      class ordenSeleccion{
      public static void main(String[] args){
      Scanner sc=new Scanner(System.in);
      int temp;
      int[] numeros=new int[5];
      System.out.println("llenando arreglo");
      for(int i=0;i<numeros.length;i++){
      System.out.println("digite dato entero numero:-- " + i );
      numeros[i]=sc.nextInt();
      }



      System.out.println("el orden original:....");
      for(int i=0;i<numeros.length;i++){
      System.out.println(i + " : " + numeros[i]);
      }

      System.out.println("ordenando por seleccion");

      for(int i=0;i<numeros.length-1;i++){
      int minimo=i;
      for(int j=i+1;j<numeros.length;j++){
      if(numeros[j]<numeros[minimo]){
      minimo=j;
      }
      }
      temp=numeros[i];
      numeros[i]=numeros[minimo];
      numeros[minimo]=temp;

      }
      System.out.println("orden correcto:...");
      for(int i=0;i<numeros.length;i++){
      System.out.println(i + " : " + numeros[i]);
      }
      }
      }

      Eliminar
    2. Luis, el metodo seleccion ordena el arreglo, buscando el elemnto mas pequeño y lo coloca al comeinzo y asi sucesivamente hasta llegar a completar la operacion; Mi duda es, como cambiarias el codigo el para que busque PRIMERO EL MAYOR ELEMENTO Y LO COLOQUE AL FINAL ASI HASTA LLEGAR A ORDENARLO; osea la opeacion pero al reves ¡¿?¿? me lo po}drias masnda¡? (kennymezach@gmail.com) ...Gracias

      Eliminar
    3. Luis como podría hacerlo ascendente y descendiente

      Eliminar
  5. sabes como sacar el caso mejor y peor ???

    ResponderEliminar
  6. gracias desde venezuela en mi netbeans 7.4 funciona de maravilla

    ResponderEliminar
    Respuestas
    1. Gracias por el comentario Gabriel y Saludos a Venezuela ;)

      Eliminar
  7. Éste creo que es algo distinto al suyo. Funciona bien.

    public static int[] seleccion(int[] tabla) {
    int menor;
    int aux;
    for (int i=0; i<tabla.length-1; i++) {
    menor = tabla[i];
    for (int j=i+1; j<=tabla.length-1; j++) {
    if (tabla[j] < menor) {
    aux = tabla[j];
    tabla[j] = menor;
    menor = aux;
    }
    }
    tabla[i] = menor;
    }
    return tabla;
    }

    public static void main(String[] args) {
    int[] tabla = {5,78,2,3,1,25,7,1,90,8,1,45};
    int[] nuevaTabla = seleccion(tabla);
    for (int i=0; i<nuevaTabla.length; i++) {
    System.out.println(nuevaTabla[i]);
    }
    }

    ResponderEliminar
    Respuestas
    1. gracias amigo , me haz ayudsado con ese codigo

      Eliminar
    2. gracias amigo , me haz ayudsado con ese codigo

      Eliminar
  8. selección por ordenación es lo mismo q inserción directa??

    ResponderEliminar
  9. necesito ordenar este array en orden acendente prodria alguien porfavor ayudarme



    import java.util.*;

    public class ArrayAlex {


    public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    //Variables

    int Promedio;
    int i;
    //Array
    int[] Vect = new int[10];

    //lectura de datos y llenar el array
    System.out.println("Lectura de los Numeros del Array: ");
    for (i = 0; i < 10; i++) {
    System.out.print("Numero[" + i + "]= ");
    Vect[i] = sc.nextInt();




    }
    Promedio=Vect[9]+Vect[8]+Vect[7]+Vect[6]+Vect[5]+Vect[4]+Vect[3]+Vect[2]+Vect[1]+Vect[0]/10;

    //Decendente
    System.out.println("Orden Decendente:");
    System.out.println(Vect[9] +" "+ Vect[8] +" "+ Vect[7] +" "+ Vect[6] +" "+ Vect[5] +" "+ Vect[4] +" "+ Vect[3] +" "+ Vect[2] +" "+ Vect[1] +" "+ Vect[0]);


    //Acendente
    System.out.println("Orden Acendente:");
    System.out.println(Vect[0] +" "+ Vect[1] +" "+ Vect[2] +" "+ Vect[3] +" "+ Vect[4] +" "+ Vect[5] +" "+ Vect[6] +" "+ Vect[7] +" "+ Vect[8] +" "+ Vect[9]);

    //Mayor
    System.out.println("Numero Mayor:");
    System.out.println(Vect[9]);

    //Menor
    System.out.println("Numero Menor:");
    System.out.println(Vect[0]);

    //Promedio
    System.out.println("Promedio:");
    System.out.println(Promedio);
    }
    }

    ResponderEliminar
  10. Me lo puedes hacer en recursivo por favor :v

    ResponderEliminar