Está en la página 1de 24

Algoritmos de ordenamiento

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

El m é burbuja Todo Lo Podemos representar de la forma Siguiente público 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 Más Completo público 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);

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

al sobrepasarse este se duplicará al llegar al tamaño fijado. aunque existen desventajas en comparación con los arreglos. //en esta instanacia el objeto se le dió una dimensión de 15 y //su incremento será de 15 Vector vtrSegundo = new Vector(15). } } Vector La clase Vector es una clase que nos ayuda a realizar varias funciones que con un arreglo no se puede. } return listaIn. ya que por defecto o de forma implicita ella se define en un tamaño de 10. en una buena práctica de programación. Veamos las diferentes formas de definir un objeto con las clase Vector //en esta instanacia el objeto tomará una dimensión de 10 y //su incremento será de 10 Vector vtrPrimero = new Vector(). //en esta instanacia el objeto se le dió una dimensión de 15 y su incremento será de 2 //Este es el recomendado Vector vtrTercero = new Vector(15.2). Por lo tanto. Ahora bien al hacer esto. y esk par que el acceso y la manipulación es más lenta. Una de las ventajas que nos dá la clase Vector es que no necesito declarar o definirle la dimensión. . debemos considerar si el uso del objeto declarado sobrepasará el tamaño definido.listaIn[posicion_menor] = intercambiar. 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. es decir si declaramos un objeto sin definir el tamaño o si le definimos el tamaño.

.java 01 02 public class ArregloUni{ protected static int MAX=20. public void ingreso(){ 11 12 int i.out. 13 14 do{ System.cant.Otra ventaja es que podemos almacenar diferentes tipos de datos. desde tipos de datos primitivos hasta tipos de datos de objetos. 03 04 protected int n. protected int []a=new int[MAX]. 05 06 public int cantidad(){ 07 08 09 10 } return n. esto no lo podemos realizar con un arreglo solo permite un solo tipo de datos ArregloUni.print("Cuantos elementos : ").

out. } n=cant.i++) System. for(i=0.datoInt(). System. } else System. } 17 18 19 20 21 22 23 24 public void reporte(){ 25 26 int i. public int localizar(int x){ .15 16 cant=Leer.out.n>i.cant>i. a[i]=Leer. 27 28 29 30 31 32 33 34 } if(n>0){ for(i=0. } while(cant<1 || cant>MAX).datoInt().print(a[i]+"\t").println("Esta Vacio").print("elemento "+i+":").out.i++){ System.out.println("\n").

n=n+1. // Esta en posición i 39 40 41 42 43 44 } } else return -1. // Esta vacia public void insertar(int x. if (x==a[i]) return i.println("Esta vacio").35 36 37 38 int i=0. . } else if (n>0) System. if(n>0){ while (i<n-1 && x!=a[i]) i++. a[pos]=x.out. 47 48 49 50 51 52 if ((n>0) && (n)!=MAX){ for(i=n-1. int pos){ 45 46 int i.println("Desbordamiento").pos<=i.i--) a[i+1]=a[i]. 53 else System. // No se encuentra else return -2.out.

DemoOrdenamiento.out. 07 . n=n-1. 59 60 61 62 63 64 65 } } if(n>0){ for(i=pos.n-1>i. int sw.java 01 02 03 04 05 06 public class DemoOrdenamiento { public static void main(String []args) { Ordenamiento datos=new Ordenamiento(). } else System.i++) a[i]=a[i+1].opcion.54 55 56 } public void suprimir(int pos){ 57 58 int i.println("Esta vacio").

08 09 10 11 12 13 14 datos. Burbuja de derecha a Izquierda").print("Opcion ==> ").println("4.out. if(opcion>0) { System. System.println("3. Metodo Shell").out. System.out. Burbuja Derecha Izquierda"). System. System.datoInt().out. } . 15 16 17 18 19 20 21 22 23 24 25 26 System. Ordenamiento rápido").out.println("5. Inserción Directa").out. Salir").out. Selección Directa").out. System.reporte().println("Arreglo antes de ordenar"). opcion=Leer.ingreso().println("6. datos. System.println("0.out. do{ System.println("1. sw=1.println("2.

}while(sw==1).burbuja_izq_der().break. .baraja().println("Arreglo despues de ordenar").burbuja_der_izq().break.0. case 5: datos.a. datos. case 1: datos.break.seleccion_directa(). 35 36 37 38 39 40 41 42 43 44 45 46 } } } } case 6: datos.out.shell().break.break. case 3: datos.break.reporte().quicksort(datos.break.n-1). 33 34 case 4: datos. if(opcion>0) { System.27 28 29 30 switch(opcion) { case 0: sw=0.datos. 31 32 case 2: datos.

// devolver el dato tecleado . BufferedReader flujoE= new BufferedReader(isr). } catch(IOException e){ 09 10 11 12 13 14 15 16 17 18 } System.println("Error: " + e.err. } return sdato.Leer. // Leer.in).java 01 02 import java.getMessage()). try{ // Definir un flujo de caracteres de entrada: flujoE InputStreamReader isr = new InputStreamReader(System.readLine().io.*. La entrada finaliza al pulsar la tecla Entrar sdato = flujoE. public class Leer{ 03 04 05 06 07 08 public static String dato(){ String sdato = "".

parseShort(dato()).parseInt(dato()).MIN_VALUE. } } 21 22 23 24 25 26 27 28 29 30 public static int datoInt(){ try{ return Integer.MIN_VALUE. } catch(NumberFormatException e){ // valor más pequeño return Integer. } catch(NumberFormatException e){ // valor más pequeño return Short.19 20 public static short datoShort(){ try{ return Short. } } 31 32 33 34 35 36 37 38 .

39 40 public static long datoLong(){ try{ return Long.MIN_VALUE.floatValue(). } } 41 42 43 44 45 46 47 48 49 50 public static float datoFloat(){ try{ Float f = new Float(dato()). .parseLong(dato()). return Float. valor float. 51 52 53 54 55 56 57 58 } } return f.NaN. catch(NumberFormatException e){ // No es un Número. } catch(NumberFormatException e){ // valor más pequeño return Long.

return Double. } catch(NumberFormatException e){ // No es un Número.doubleValue(). return d.NaN. } } 65 66 67 68 69 70 71 72 public static String datoString(){ 73 74 75 76 } return dato().59 60 } 61 62 63 64 public static double datoDouble(){ try{ Double d = new Double(dato()). valor double. public static char datoChar(){ .

java 001 002 003 public class Ordenamiento extends ArregloUni { public void burbuja_der_izq() . } Ordenamiento. try{ InputStreamReader isr = new InputStreamReader(System. c=flujoE.read().77 78 79 80 int c=0. car=(char) c.in). BufferedReader flujoE= new BufferedReader(isr). char car. return car. } catch(IOException e){ 81 82 83 84 85 86 87 88 89 90 91 92 } } return '\0'.

for(i=1.j<=i.i>=0.i<=n-1.// 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.i++) {System.j--) {if(a[j-1]>a[j]) cambio(a. for(i=n-2. for(j=0.j.out.j.out.i--) {System.j).j-1. reporte().j.j+1).j++) { if(a[j]>a[j+1]) cambio(a.println("Recorrido"+i).println("Recorrido"+-((i-n)+1)). .//sirve para q en cada recorrido lo valla imprimiendo for(j=n-1.004 {int i.j>=i.

i++) { aux=a[i].int pos1. for(i=1.aux. } public void cambio(int[]a. a[pos1]=a[pos2].022 023 024 025 026 027 028 } } reporte(). 037 038 039 040 041 .int pos2) { int t. t=a[pos1].j.i<=n-1. } 029 030 031 032 033 034 035 036 public void baraja() { int i. a[pos2]=t.

k.aux. .042 043 044 045 046 047 048 j=i-1. a[j]=aux. } else a[j+1]=aux. j--. while(a[j]>aux && j>0) { a[j+1]=a[j]. 059 060 061 public void seleccion_directa() { int i. } 049 050 051 052 053 054 055 056 057 058 } } if(a[j]>aux) { a[j+1]=a[j].j.

a[i]=aux. aux=a[i]. public void shell() { int d.sw.i++) { k=1. } 073 074 075 076 077 078 } } a[k]=a[i]. for(j=i+1. d=n. k=a[j].062 063 064 065 066 067 068 069 070 071 072 for(i=0.i.j++) if(a[j]<aux) { k=j.j<=n-1. 079 080 081 .i<=n-2.

i+d).rigth. sw=1. }while(sw!=0). if(a[i]>a[i+d]) { cambio(a.i. } }while(i+d!=n-1).int sup) { int left. i=-1.082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 } do{ d=d/2. }while(d!=1). 099 100 101 public void quicksort(int data[].int inf. do{ i++. . do{ sw=0.

left.sup).102 double half. 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 } } if(inf<rigth) quicksort(data. while(left<rigth) { while(data[left]<half && left<sup) left++. if(left<sup) quicksort(data.rigth). 119 } Estos métodos de ordenamiento fueron implementados en mi curso de Estructura de datos y algoritmos . left=inf. while(half<data[rigth] && rigth>inf) rigth--. half=data[(left+rigth)/2].inf. rigth=sup.

Después de crear el objeto de DefaultCategoryDataset añadimos algunos datos de este objeto mediante la invocación de método setValue ().La clase principal es DemoOrdenamiento.net/codigo-java-jmenu-jmenubar-jmenuitem-jpopupmenu/ http://www. etc Descripción del Código Para definir un conjunto de datos para un gráfico de barras que tenemos que crear un objeto de tipo DefaultCategoryDataset: DefaultCategoryDataset conjunto de datos = new DefaultCategoryDataset ().caspercomsci. En este ejemplo. Paginas que estan buenas nada que ver con el tema: http://casidiablo. Después de crear la instancia del conjunto de datos. aprender algunas de las características más interactiva de JFreeChart como el color de fondo de la tabla y ajustar el color del título.com/pages/javasource. espero les sirva.htm Derecha Izquierda – – Izquierda Derecha Directa Directa Shell Descripción del programa Para crear un gráfico de barras se utiliza el objeto de DefaultCategoryDataset. yo les he probado compilando con gcj y jdk en linux. .java Los métodos de ordenamiento que incluyen son: Burbuja Burbuja Inserción Selección Método Ordenamiento rápido Todos estas clases deberìan estar incluidos en el mismo proyecto o en la misma carpeta desde donde se manda la orden al compilador. En el curso usamos una IDE el JCreator sobre windows. entonces tenemos que agregar los datos en el conjunto de datos mediante la invocación del método setValue ().

This método es el siguiente: CreateBarChart pública JFreeChart estática (título java.plot.data.*. Se utiliza para mostrar un gráfico.yellow). urls boolean).category.DefaultPieDataset.String.awt.lang. conjunto de datos CategoryDataset. falso).jfree.createBarChart ("JFreeChart Barras con". Método anterior se usa para ajustar el color de fondo del gráfico . conjunto de datos.general.chart.jfree. cierto.*. El primer argumento especifica la puntuación total obtenida por el estudiante y el segundo argumento especifica lo que aparecerá en la leyenda con el significado de la barra. org.setValue (6. Rahul??). chart.chart. tooltips boolean.jfree. Aquí está el código del programa: import import import import import import import import org.jfree. Marcas. "Estudiante". java.chart.String categoryAxisLabel. Después de agregar los datos en el conjunto de datos que creamos el gráfico de barras mediante la invocación de la createBarChart () método. Por encima de método se utiliza para obtener el objeto de la Parcela en gráfico de barras p.*.data. Método anterior se usa para ajustar el color de las líneas de la cuadrícula trama ChartFrame cuadro1 = new ChartFrame ("Gráfico de barras".RED). chart. org.xy. java. Este método es un método estático de la clase y suChartFactory devuelve el objeto de la sintaxis JFreeChart type.category. verdadero. org.lang.getCategoryPlot (). Método anterior se usa para ajustar el color del título del gráfico CategoryPlot p = chart.VERTICAL.*.jfree.getTitle () setPaint (Color.jfree. "Marcas". orientación PlotOrientation.String. JFreeChart tabla = ChartFactory. org. gráfico).jfree.lang.data. PlotOrientation.renderer. la leyenda boolean.setBackgroundPaint (Color. valueAxisLabel java.*. Después de esto creamos el objeto de ChartFrame.*. org.blue).*. . org.setRangeGridlinePaint (Color.data.

setValue ( 7 .getTitle () . false ) .setValue ( 9 . dataset. chart. 350 ) . dataset. } } De salida del Programa: .setPaint ( Color. "Marks" . "Marks" . "Marks" .setVisible ( true ) . PlotOrientation. "Prashant" ) .setValue ( 6 .createBarChart ( "BarChart using JFreeChart" . JFreeChart chart = ChartFactory. dataset.setBackgroundPaint ( Color.setValue ( 4 .VERTICAL.setRangeGridlinePaint ( Color. "Marks" . p.setSize ( 400 . frame1. "Chandan" ) .chart ) .getCategoryPlot () . "Marks" . dataset. dataset.red ) . CategoryPlot p = chart. "Rahul" ) . dataset. false. chart. frame1.blue ) .setValue ( 2 . "Student" . ChartFrame frame1= new ChartFrame ( "Bar Chart" . "Deepak" ) . "Vinod" ) .public class BarExample1 { public static void main ( String arg []){ DefaultCategoryDataset dataset = new DefaultCategoryDataset () .yellow ) . "Marks" .true.