Algoritmos de ordenamiento

download Algoritmos de ordenamiento

of 24

Transcript of Algoritmos de ordenamiento

Algoritmos de ordenamientoEn ESTA Entrada estaremos UNOS CUANTOS viendos Algoritmos de ordenamiento prrafo implementarlos Con Java, Se Puede Decir Que Son Mas Conocidos y los utilizados. Mtodo de Burbuja: Este Mtodo REVISA Todos los Valores o Elementos de Una Lista y los Intercambia si estan en posicion Una u Orden Equivocado. Este Mtodo es Conocido Como El Mas Fcil de implementar, Pero realmente en Concepto de Eficiencia Es El Menos Recomendado.

El m burbuja Todo Lo Podemos representar de la forma Siguiente pblico cadena [] ordenarLista ( cadena [] listaIn ) 0 ; {

int posicion_menor =

int tamanio = listaIn . longitud ; int i , j ; cadena intercambiar = para ( i = "" ; {

0 ; i < tamanio ; i + +)

posicion_menor = i ; para si posicion_menor ]) < ( j = i + 1 , j < tamanio ; j + +) {

( listaIn [ j ]. compareToIgnoreCase ( listaIn [ 0 ) {

posicion_menor = j ; } }

intercambiar = listaIn [ i ]; listaIn [ i ] = listaIn [ posicion_menor ]; = intercambiar ;

listaIn [ posicion_menor ] } volver listaIn ; } } / / Un EJEMPLO Ms Completo pblico de clase OrdenarLista {

la Cantidad de Datos Que Va un Ingresar ==> " ); reg = Teclado.lectura(); if (reg != null) { if (reg.length() > 0) { datos = new String[Integer.parseInt(reg)]; int i; String temp = ""; for (i = 0; i < Integer.parseInt(reg); i++) { do { System.out.print("Introduzca valor "+ (i+1)+"==>"); temp = Teclado.lectura(); } while (temp.trim().equals("")); datos[i] = temp; } datos = lista.ordenarLista(datos);

cantidad = datos.length; for (i = 0; i < cantidad; i++) { System.out.println((i+1)+ "==>" + datos[i]); } } } } catch (IOException ex) { Logger.getLogger(OrdenarLista.class.getName()).log(Level. SEVERE, null, ex); } } public String[] ordenarLista(String[] listaIn) { int posicion_menor = 0; int tamanio = listaIn.length; int i, j; String intercambiar = ""; for (i = 0; i < tamanio; i++) { posicion_menor = i; for (j = i + 1; j < tamanio; j++) { if (listaIn[j].compareToIgnoreCase(listaIn[posicion_menor]) < 0) { posicion_menor = j; } } intercambiar = listaIn[i]; listaIn[i] = listaIn[posicion_menor];

listaIn[posicion_menor] = intercambiar; } return listaIn; } }

VectorLa clase Vector es una clase que nos ayuda a realizar varias funciones que con un arreglo no se puede, aunque existen desventajas en comparacin con los arreglos, y esk par que el acceso y la manipulacin es ms lenta. Una de las ventajas que nos d la clase Vector es que no necesito declarar o definirle la dimensin, ya que por defecto o de forma implicita ella se define en un tamao de 10. Ahora bien al hacer esto, debemos considerar si el uso del objeto declarado sobrepasar el tamao definido, es decir si declaramos un objeto sin definir el tamao o si le definimos el tamao, al sobrepasarse este se duplicar al llegar al tamao fijado. Por lo tanto, en una buena prctica de programacin, se le debe asignar cuanto debe ser el incremento y as evitamos el uso imnecesario de memoria que es un punto bien importante al momento de rendimiento. Veamos las diferentes formas de definir un objeto con las clase Vector//en esta instanacia el objeto tomar una dimensin de 10 y //su incremento ser de 10 Vector vtrPrimero = new Vector(); //en esta instanacia el objeto se le di una dimensin de 15 y //su incremento ser de 15 Vector vtrSegundo = new Vector(15); //en esta instanacia el objeto se le di una dimensin de 15 y su incremento ser de 2 //Este es el recomendado Vector vtrTercero = new Vector(15,2);

Otra ventaja es que podemos almacenar diferentes tipos de datos, desde tipos de datos primitivos hasta tipos de datos de objetos, esto no lo podemos realizar con un arreglo solo permite un solo tipo de datos

ArregloUni.java01 02 public class ArregloUni{ protected static int MAX=20;

03 04

protected int n; protected int []a=new int[MAX];

05 06

public int cantidad(){

07 08 09 10 }

return n;

public void ingreso(){

11 12

int i,cant;

13 14

do{ System.out.print("Cuantos elementos : ");

15 16

cant=Leer.datoInt(); } while(cantMAX); for(i=0;cant>i;i++){ System.out.print("elemento "+i+":"); a[i]=Leer.datoInt(); } n=cant; }

17 18 19 20 21 22 23 24

public void reporte(){

25 26

int i;

27 28 29 30 31 32 33 34 }

if(n>0){ for(i=0;n>i;i++) System.out.print(a[i]+"\t"); System.out.println("\n"); }

else System.out.println("Esta Vacio");

public int localizar(int x){

35 36 37 38

int i=0; if(n>0){

while (i0) && (n)!=MAX){ for(i=n-1;pos0) System.out.println("Desbordamiento");

53

else System.out.println("Esta vacio");

54 55 56

}

public void suprimir(int pos){

57 58

int i;

59 60 61 62 63 64 65 } }

if(n>0){ for(i=pos;n-1>i;i++) a[i]=a[i+1]; n=n-1; }

else System.out.println("Esta vacio");

DemoOrdenamiento.java01 02 03 04 05 06 public class DemoOrdenamiento {

public static void main(String []args) {

Ordenamiento datos=new Ordenamiento(); int sw,opcion;

07

08 09 10 11 12 13 14

datos.ingreso(); sw=1; do{

System.out.println("0. Salir"); System.out.println("1. Burbuja Derecha Izquierda"); System.out.println("2. Burbuja de derecha a

Izquierda");

15 16 17 18 19 20 21 22 23 24 25 26

System.out.println("3. Insercin Directa"); System.out.println("4. Seleccin Directa"); System.out.println("5. Metodo Shell"); System.out.println("6. Ordenamiento rpido"); System.out.print("Opcion ==> "); opcion=Leer.datoInt(); if(opcion>0) { System.out.println("Arreglo antes de ordenar"); datos.reporte(); }

27 28 29 30

switch(opcion) {

case 0: sw=0;break; case 1: datos.burbuja_der_izq();break;

31 32

case 2: datos.burbuja_izq_der();break; case 3: datos.baraja();break;

33 34

case 4: datos.seleccion_directa();break; case 5: datos.shell();break;

35 36 37 38 39 40 41 42 43 44 45 46 } } } }

case 6: datos.quicksort(datos.a,0,datos.n-1);break;

if(opcion>0) { System.out.println("Arreglo despues de ordenar"); datos.reporte();

}while(sw==1);

Leer.java01 02 import java.io.*; public class Leer{

03 04 05 06 07 08

public static String dato(){ String sdato = ""; try{ // Definir un flujo de caracteres de entrada: flujoE InputStreamReader isr = new InputStreamReader(System.in); BufferedReader flujoE= new BufferedReader(isr); // Leer. La entrada finaliza al pulsar la tecla Entrar sdato = flujoE.readLine(); } catch(IOException e){

09 10

11 12 13 14 15 16 17 18 }

System.err.println("Error: " + e.getMessage()); }

return sdato; // devolver el dato tecleado

19 20

public static short datoShort(){ try{ return Short.parseShort(dato()); } catch(NumberFormatException e){ // valor ms pequeo return Short.MIN_VALUE; } }

21 22

23 24 25 26

27 28 29 30

public static int datoInt(){ try{ return Integer.parseInt(dato()); } catch(NumberFormatException e){ // valor ms pequeo return Integer.MIN_VALUE; } }

31 32

33 34 35 36

37 38

39 40

public static long datoLong(){ try{ return Long.parseLong(dato()); } catch(NumberFormatException e){ // valor ms pequeo return Long.MIN_VALUE; } }

41 42

43 44 45 46

47 48 49 50

public static float datoFloat(){ try{ Float f = new Float(dato());

51 52

53 54 55 56 57 58 } }

return f.floatValue();

catch(NumberFormatException e){ // No es un Nmero; valor float.

return Float.NaN;

59 60

}

61 62 63 64

public static double datoDouble(){ try{

Double d = new Double(dato()); return d.doubleValue(); } catch(NumberFormatException e){ // No es un Nmero; valor double. return Double.NaN; } }

65 66 67 68

69 70 71 72

public static String datoString(){

73 74 75 76 }

return dato();

public static char datoChar(){

77 78 79 80

int c=0; try{ InputStreamReader isr = new InputStreamReader(System.in); BufferedReader flujoE= new BufferedReader(isr); c=flujoE.read(); char car; car=(char) c; return car; } catch(IOException e){

81 82

83 84

85 86

87 88 89 90 91 92 } }

return '\0'; }

Ordenamiento.java001 002 003 public class Ordenamiento extends ArregloUni {

public void burbuja_der_izq()

004

{int i,j; for(i=1;i=i;j--) {if(a[j-1]>a[j]) cambio(a,j-1,j); reporte();// se pone para q cada recorrido valla reportando

005 006

007 008 009 010

011 012 013 014 } }

}

public void burbuja_izq_der()

015 016 017 018 019 020 021

{int i,j; for(i=n-2;i>=0;i--) {System.out.println("Recorrido"+-((i-n)+1)); for(j=0;ja[j+1]) cambio(a,j,j+1);

022 023 024 025 026 027 028 } }

reporte(); }

public void cambio(int[]a,int pos1,int pos2) { int t; t=a[pos1]; a[pos1]=a[pos2]; a[pos2]=t; }

029 030

031 032 033 034 035 036

public void baraja() { int i,j,aux; for(i=1;iaux && j>0) { a[j+1]=a[j]; j--; }

049 050 051 052 053 054 055 056 057 058 } }

if(a[j]>aux) { a[j+1]=a[j]; a[j]=aux; } else a[j+1]=aux;

059 060 061

public void seleccion_directa() {

int i,j,k,aux;

062 063 064 065 066 067 068 069 070 071 072

for(i=0;i