Vous êtes sur la page 1sur 9

ORDENAMIENTO POR EL METODO DE SELECCIN.

El ordenamiento por seleccin (Selection Sort en ingls) es un algoritmo de ordenamiento que requiere O Su funcionamiento es el siguiente:

operaciones para ordenar una lista de n elementos.

Buscar el mnimo elemento de la lista Intercambiarlo con el primero Buscar el mnimo en el resto de la lista Intercambiarlo con el segundo

Y en general:

Buscar el mnimo elemento entre una posicin i y el final de la lista Intercambiar el mnimo con el elemento de la posicin i ALGORITMO.

para i=1 hasta n-1 minimo = i; para j=i+1 hasta n si lista[j] < lista[minimo] entonces minimo = j /* (!) */ fin si fin para intercambiar(lista[i], lista[minimo]) fin para

CODIGO EN JAVA.
public class seleccion { 06 private int[] vector; 07 private int elementos; 08 09 public seleccion (){} 10 11 public int[] ordenar(int[] v){ 12 this.vector=v; 13 elementos = vector.length; 14 //se toma como valor mayor el ultimo elemento del vector "n-1" 15 int mayor = vector[elementos-1];//ojo: en java el array empieza en "0" 16 int pos = elementos-1; 17 int aux; 18 //se repite el ciclo hasta que quede un solo elemento 19 while(elementos > 1) { 20 //se recorre todos los elementos del vector 21 for(int i=0; i<elementos;i++){

22 //se busca el elemento mayor 23 if(vector[i]>mayor){ 24 mayor = vector[i]; 25 pos = i; 26 } 27 } 28 // se intercambian valores, el valor mayor encontrado se hubica en 29 // la ultima posicion del vector 30 aux = vector[elementos-1]; 31 vector[elementos-1] = mayor; 32 vector[pos] = aux; 33 System.out.println("orden de ciclo : "+ Mostrar(vector)); 34 //se resta en uno la cantidad de elementos 35 elementos--; 36 //se toma como valor mayor el ultimo elemento del vector 37 mayor = vector[elementos-1]; 38 pos = elementos-1; 39 } 40 return vector; 41 } 42 43 //para imprimir el array de la forma | 0 | 1 | 2 | 3 | 4 | 44 public String Mostrar(int[] v){ 45 String s=" | "; 46 for (int i=0; i < v.length; i++){ 47 s += v[i] + " | "; 48 } 49 return s; 50 } 51 }

01 import java.util.Random; 02 /** 03 * @web http://jc-mouse.blogspot.com/ 04 * @author Mouse 05 */ 06 public class Main { 07 08 public static void main(String[] args) { 09 //creamos un array y llenamos este con numeros al azar 10 int[] c = null ; 11 c = generarlista(5); 12 seleccion s = new seleccion(); 13 System.out.println("ORIGINAL : "+ s.Mostrar(c)); 14 System.out.println("ORDENADO : "+ s.Mostrar(s.ordenar(c))); 15 } 16 17 //genera un array de n elementos enteros 18 public static int[] generarlista(int n){ 19 int[] v = new int[n]; 20 Random rand = new Random(); 21 for (int i=0; i<v.length; i++){ 22 v[i]=rand.nextInt(10); 23 }

24 25 26 }

return v; }

ORDENAMIENTO POR EL METODO DE LA BURBUJA.


La Ordenacin de burbuja (Bubble Sort en ingls) es un sencillo algoritmo de ordenamiento. Funciona revisando cada elemento de la lista que va a ser ordenada con el siguiente, intercambindolos de posicin si estn en el orden equivocado. Es necesario revisar varias veces toda la lista hasta que no se necesiten ms intercambios, lo cual significa que la lista est ordenada. Este algoritmo obtiene su nombre de la forma con la que suben por la lista los elementos durante los intercambios, como si fueran pequeas "burbujas". Tambin es conocido como el mtodo del intercambio directo. Dado que solo usa comparaciones para operar elementos, se lo considera un algoritmo de comparacin, siendo el ms sencillo de implementar. ALGORITMO EN PSEUDOCODIGO. Una manera simple de expresar el ordenamiento de burbuja en pseudocdigo es la siguiente:

Este algoritmo realiza el ordenamiento de una lista a de n valores, en este caso de n trminos numerados del 0 al n-1, consta de dos bucles anidados uno con el ndice i, que da un tamao menor al recorrido de la burbuja en sentido inverso de 2 a n, y un segundo bucle con el ndice j, con un recorrido desde 0 hasta n-i, para cada iteracin del primer bucle, que indica el lugar de la burbuja. La burbuja son dos trminos de la lista seguidos, j y j+1, que se comparan, si el primero es menor que el segundo sus valores se intercambian.

Esta comparacin se repite en el centro de los dos bucles, dando lugar a la postre a una lista ordenada, puede verse que el nmero de repeticiones sola depende de n, y no del orden de los trminos, esto es, si pasamos al algoritmo una lista ya ordenada, realizara todas las comparaciones exactamente igual que para una lista no ordenada, esta es una caracterstica de este algoritmo, luego veremos una variante que evita este inconveniente. Para comprender el funcionamiento, veamos un ejemplo sencillo: Tenemos una lista de nmeros que hay que ordenar:

Podemos ver que la lista que tiene cinco trminos, luego:

El ndice i har un recorrido de 2 hasta n:

Que en este caso ser de 2 a 5. Para cada uno de los valores de i, j tomara sucesivamente los valores de 0 hasta n-i:

Para cada valor de j, obtenido en ese orden, se compara el valor del ndice j con el siguiente:

Si el termino j es mayor que el termino j+1, los valores se permutan, en caso contrario se contina con la iteracin.

Para el caso del ejemplo, tenemos que:

Para la primera iteracin del primer bucle:

y j tomara los valores de 0 hasta 3:

Cuando j vale 0, se comparan orden. Ahora j vale 1 y se comparan una nueva lista.

, el 55 y el 86, dado que 55 < 86 no se permutan el

el 86 y el 48 Como 86 > 48, se permutan, dando lugar a

Se repite el proceso hasta que j valga 3, dando lugar a una lista parcialmente ordenada, podemos ver que el termino de mayor valor esta en el lugar ms alto.

Ahora i vale 3, y j har un recorrido de 0 a 2. Primero j vale 0, se comparan a la nueva lista. , el 55 y el 48, como 55 > 48 se permutan dando lugar

Para j = 1 se compara el 55 con el 16 y se cambian de orden. Para j = 2 se compara el 55 y el 82 y se dejan como estn, finalizando el bucle con una lista mejor ordenada, puede verse que los dos valores ms altos ya ocupan su lugar. No se ha realizado ninguna comparacin con el termino cuarto, dado que ya se sabe que despus del primer ciclo es el mayor de la lista. El algoritmo consiste en comparaciones sucesivas de dos trminos consecutivos ascendiendo de abajo a arriba en cada iteracin, como la ascensin de las burbujas de aire en el agua, de ah el nombre del procedimiento. En la primera iteracin el recorrido ha sido completo, en el segundo se ha dejado l ltimo trmino, al tener ya el mayor de los valores, en los sucesivos s ira dejando de realizar las ltimas comparaciones, como se puede ver.

Ahora ya i vale 4 y j recorrer los valores de 0 a 1. Cuando j vale 0, se comparan esto es el 48 y el 16 dado que 48 es mayor que 16 se permutan los valores, dando lugar a una lista algo ms ordenada que la anterior, desde esta nueva ordenacin, j pasa a valer 1, con lo que se comparan los trminos el 48 y el 55 que quedan en el mismo orden. En este caso la burbuja ha ascendido menos que en los casos anteriores, y la lista esta ya ordenada, pero el algoritmo tendr que completarse, realizando una ultima iteracin. Hay que tener en cuenta que el bucle realiza un nmero fijo de repeticiones y para finalizar tendrn que completarse, aun en el caso extremo, de que la lista estuviera previamente ordenada.

Por ltimo i vale 5 y j solo puede vale 0, con lo que solo se realizara una comparacin de el 16 y el 48, que ya estn ordenados y se dejan igual.

Los bucles finalizan y tambin el procedimiento, dejando la lista ordenada. Una variante que finaliza en caso de que la lista est ordenada, puede ser la siguiente: como en el ejemplo anterior, empleando un centinela ordenado, que detecta que no se ha modificado la lista en un recorrido de la burbuja, y que por tanto la lista ya est ordenada, finalizando.

CODIGO EN JAVA.
public class burbuja { int[] vector ; int elementos=0; boolean bandera=true; public burbuja (int[] v){ this.vector=v; } public int[] ordenar(){ int p1; int p2; int y=0; bandera=true; elementos = vector.length; while((elementos > 1) && (bandera==true) ) { y=0; p1 = vector[y]; p2 = vector[y+1]; elementos--; bandera=false; for(int i=0; i < elementos; i++){ if (p1>p2){ vector[i]=p2; vector[i+1]=p1; bandera=true; }//fin de si System.out.println("ordenando: "+ Mostrar(vector)); y++; if (y < elementos){ p1 = vector[y]; p2 = vector[y+1]; } }//fin for }//fin de mientras return vector; } //para imprimir el array public String Mostrar(int[] v){ String s=" | "; for (int i=0; i < v.length; i++){ s += v[i] + " | "; } return s; } }

Para implementar esta clase, el main debe contener el siguiente codigo:


public class Main {

public static void main(String[] args) { //creamos un array y llenamos este con numeros al azar int[] c = null ; c = generarlista(5); //creamos el objeto burbuja y mostramos burbuja b = new burbuja(c); System.out.println("ORIGINAL : "+ b.Mostrar(c)); System.out.println("ORDENADO : "+ b.Mostrar(b.ordenar())); } //genera un array de n elementos public static int[] generarlista(int n){ int[] v = new int[n]; Random rand = new Random(); for (int i=0; i<v.length; i++){ v[i]=rand.nextInt(1000); } return v; } }