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)


29 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
    4. Solo tienes que cambiar el comparador, < por >, y ahora si quieres que sea opcional solo sería agregarle un parámetro boolean a la función que indique de forma quiero que lo haga.

      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
  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
  11. buenas noches alguien me puede ayudar a ver que tipo de modelo de ordenamiento (seleccion, burbuja, rapido, insercion) utiliza y que cambios tengo que hacerle para ejecutarlo correctamente, de antemano gracias


    package metodo;
    /**
    *
    * @author SERAFSC
    */
    public class Metodo {
    /**
    * @param args the command line arguments
    */
    public static void main(String[] args) {
    int Arrl[]={1,2,3,4,5,6,7,8,9,10};
    int n=3;
    int pinic=0;
    int pfin=arrl.length-1;
    int pmedio;
    while(pinic<=pfin){
    pmedio=(pfin+pinic)/2;
    if(arrl[pmedio] == n){
    System.out.println("el dato está entre"+pinic+" y "+pfin);
    breack;
    }else if(n<arrl[pmedio]){
    pfin = pmedio-1;
    }else {
    pinic = pmedio +1;
    }
    }
    }
    }

    ResponderEliminar
  12. quien me hace el favor de explicarme este ejemplo

    ResponderEliminar

  13. Implementar un programa para ingresar n elementos en un arreglo del tipo String,
    reportar el arreglo ordenado alfabéticamente siguiendo el método de selección.

    ResponderEliminar
    Respuestas
    1. aca el metodo:

      private static void metododeSeleccion(String [] palabras){

      int i, j, pos;
      String menor, aux;

      for(i=0;i<palabras.length-1;i++){
      menor=palabras[i];
      pos=i;
      for(j=i+1;j<palabras.length;j++){
      if(palabras[j].compareTo(menor)<0){ //compara si palabras[j] es menor que la variable "menor"
      menor=palabras[j];
      pos=j;
      }
      }
      if(pos!=i){
      aux=palabras[i];
      palabras[i]=palabras[pos];
      palabras[pos]=aux;
      }
      }
      for(String s: palabras){
      System.out.print(s + " ");
      }
      }

      Eliminar
  14. Una pregunta, como puedo hacer muestre el menor arriba y el mayor abajo

    ResponderEliminar
  15. URGENTE quien puede pasarme codigo de ordenamiento por seleccion en java que guarde los tiempos en una tabla y que grafique para saber que tipo de orden es y que sea grafico xfa, es para una tarea...... y si se puede que sea para mañana..

    ResponderEliminar
  16. AYUDA....Se desea implementar una solución que permita al usuario ingresar el tamaño del arreglo y los elementos al mismo, así como seleccionar entre varias opciones de salida del problema. Para la solución del problema el usuario podrá seleccionar entre las siguientes opciones:
    a. Ordenamiento de los elementos por el método de burbuja
    b. Ordenamiento de los elementos por el método de inserción
    c. Ordenamiento de los elementos por el método de selección

    ResponderEliminar
  17. Me piden un metodo de ordenacion por inserccion en hava especificamente en netbeans con metodos

    ResponderEliminar