Duda ejercicio java Ordenación de Vectores

Iniciado por Thryks, 12 Marzo 2014, 12:30 PM

0 Miembros y 1 Visitante están viendo este tema.

Thryks

Buenas, tengo una duda con el código de un programa que estoy haciendo para ordenar vectores, verán cuando ejecuto el programa, parece que los ordena correctamente pero el primer número no lo ordena y me gustaría saber porque, se que tiene que ver con la inicialización de la variable cont1 en el bucle for pero no encuentro exactamente donde está el problema por si alguien pudiera ayudarme, a continuación adjunto el código del programa en cuestión.
PD: Alguna página donde poner dudas de código para que sean resueltas, lo digo para no sobrecargar mucho el foro con preguntas molestas y tontas como la mía ya que no es algo muy complejo lo que estoy preguntando y quizás alguno de vosotros se rían por la facilidad del problema.
Disculpen las molestias.
package operaciones;

public class MinimunScalarProduct {
  public static void main (String[] args){
      //Creamos el Vector
      int []x = {3,2,6,4,5,8,7,9,1,10};
      //Creamos las variables
     int auxiliar,cont1,cont2;
     //Termina cuando supera la longitud del vector.
     for(cont1 = 1; cont1<x.length;cont1++)
     {
         auxiliar = x[cont1];
         for(cont2=cont1-1;cont2>0 && x[cont2]>auxiliar;cont2--)
         {
             x[cont2+1]=x[cont2];
             x[cont2]=auxiliar;
         }
     }
     for(int i=0;i<x.length;i++)
     {
         System.out.println(x[i]);
     }
  }
 
}
Futuro Sysadmin

Gh057

#1
hola Thryks mirando el código veo que cont1 inicia en 1, sin embargo en la iteración para visualizarlo comienzas desde 0. deberías iniciar cont al mismo valor, saludos.

(agrego) deberías chequear el metodo de ordenación luego... básicamente estarías implementando el método de selección. igualmente te dejo unos links para orientarte un poco.

-> http://es.wikipedia.org/wiki/Ordenamiento_por_selecci%C3%B3n

-> http://es.wikipedia.org/wiki/Algoritmo_de_ordenamiento

-> http://artemisa.unicauca.edu.co/~nediaz/EDDI/cap03.htm

También en el foro tanto en java como en c++ hay post referidos al tema,en cuanto a páginas mmm no recuerdo ahora sé que había algunas... (creo que en c++ estaba c con clases o algo así, hay otra parecida para java pero se me fue ahora de la mente) aunque aquí en el foro hay muy buena predisposición, cualquier duda que tengas puntual estoy seguro que entre todos te brindarán un solución, mientras haya ganas de aprender no te preoupes en preguntar por que nadie nace sabiendo jejej un cordial saludo.
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...

egyware

Cita de: Gh057 en 12 Marzo 2014, 12:38 PM
...veo que cont1 inicia en 1, ...

No, no es eso. Lo más probable que lo puso en uno para que en la iteración más interna cont2 no sea un numero inferior a 0.

Exactamente no se que hace tu código de ordenamiento, pero creo que lo tienes mal planteado. Te sugiero si solo quieres ordenar empieces utilizando un algoritmo simple como el de burbuja, entre otros.

Revisando más minuciosamente (pero sin probar) creo que el problema de tu algoritmo es que en la condición del for más interno es porque tienes cont2 > 0 y talvez debe ser cont2 >= 0.

Podrías hacer un seguimiento en papel pera que veas efectivamente que hace tu algoritmo y puedas repararlo. Bueno Saludos!

Gh057

hola egyware, si vi que luego le descuenta internamente; es por eso que se nota confuso, debería analizar bien ya que la resta es posterior a la asignación ( no está como -=) por lo cual le planteaba para simplificar y mantener un orden la iniciación en cero y luego implementar en limpio un algoritmo.

a groso modo en esa condición surje el error, aunque lo interpreto como arrastre del contador; aunque obviamente sin chequear la ejecución seguramnete se me está pasando por alto otra cosa, como el tope como bien indicas. saludos!
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...

1mpuls0

#4
Te falta algo :P


Código (java) [Seleccionar]

public class MinimunScalarProduct {
   public static void main (String[] args){
   //Creamos el Vector
   int []x = {3,2,6,4,5,8,7,9,1,10};
   //Creamos las variables

   int auxiliar;
   for( int cont1 = 1; cont1 < x.length; cont1 ++ ){
       for( int cont2 = 0; cont2 < x.length - 1; cont2++ ) {
           if ( x[ cont2 ] > x[ cont2 +1 ] ) {
               auxiliar = x[ cont2 ];
               x[ cont2 ] = x[ cont2 + 1 ];
               x[ cont2 + 1 ] = auxiliar;
           }
       }
   }

   for(int indice = 0; indice < x.length; indice++  )
       System.out.print( x[indice] + "  " );
 }
}


Pero como te recomienda, trata de buscar algun método de ordenamiento.
También trata de dar nombres más adecuados a tus variables (no están tan mal) en muchas ocasiones ayuda en la comprensión.
abc

Gh057

hola Thryks, como habrás ya notado, la mayoría de los errores corresponden a errores de sintaxis, por lo cual te recomendaría que prestes atención a las indicaciones del compilador cuando intentes ejecutar un código; seguramente fueron todos indicados en la consola al contruir el proyecto, por favor tómalo como una crítica constructiva. luego cuando limpies dichos errores, se presentarán los de tiempo de ejecución, ahí es cuando entra el debugger o depurador propiamente dicho. una vez  que te corra como quieres, replantéate la optimización en la lógica del algoritmo de ordenación, verás que este ejercicio te sacará muchísimas dudas y ayudará sobre todo a pensar de una manera (valga el juego de palabras!) más ordenada. saludos!
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...

Thryks

Muchas gracias a todos por vuestros consejos. ;D, los tendré en cuenta.
Futuro Sysadmin