Autor Tema: Algoritmia ordenar un array o arreglo método burbuja Java razonamiento código ej  (Leído 3707 veces)

CoduJ

  • Sin experiencia
  • *
  • Mensajes: 28
    • Ver Perfil
Buenas, espero que se encuentren bien. Tengo una duda con un código, para ser más exactos, un algoritmo; en sí, quiero una "confirmación" de lo que pienso que pasa:

Código: [Seleccionar]
for(int j = 0; j < Array.length-1; j++){
   for(int i = 0; i < Array.length-1; i++){
      if (Array[i] > Array[i+1]){
      aux = Array[i];
      Array[i] = Array[i+1];
      Array[i+1] = aux;
   }
}

Al principio, lo hice con un solo bucle for(), pero vi que no funciona del todo, ya que me hace un "orden", pero no uno en donde se organicen de menor a mayor, entonces probé con otro bucle, y ahora si funciona, por lo que entiendo, es necesario tener for() anidados, es decir, dentro del bucle for(), hay otro, este hace un orden "superficial", el cual es perfeccionado por el que está afuera, ¿pero qué pasa realmente?
« Última modificación: 29 de Octubre 2020, 18:06 por Alex Rodríguez »

daenius

  • Sin experiencia
  • *
  • Mensajes: 24
    • Ver Perfil
Re:Duda con un código - Java
« Respuesta #1 en: 21 de Julio 2020, 20:16 »
Buenas, espero que se encuentren bien.
Buenas, espero que tú también estés bien.

No me ha quedado del todo claro, pero creo que no entiendes cómo realizar el código para reordenar un array en Java. Bueno, para ello hay varias formas, las formas cortas y rápidas y las más largas y "tediosas". Te paso lo que he hecho:

Código: [Seleccionar]
               // Empecemos con un array cualesquiera al que llamamos "CoduJ"
int coduj[] = { 2, 3, 4, 1, 8, 9, 4 };
System.out.println("Array al principio: " + Arrays.toString(coduj));
// Extraccion y simplificacion de codigo repetitivo y largo
int len = coduj.length - 1;
// Correcciones pertinentes
for (int j = 0; j < len; j++) {
for (int i = 0; i < len; i++) {
if (coduj[i] > coduj[i + 1]) {
int aux = coduj[i];
coduj[i] = coduj[i + 1];
coduj[i + 1] = aux;
}
}

}
// Reordenar un array de menor a mayor:
Arrays.sort(coduj);
System.out.println("Array una vez ordenado: " + Arrays.toString(coduj));

Pasando a comentar, me gustaría saber qué es eso de "Array" en tu porción de código que pasaste antes, ya que a no ser que se trate de una clase tuya propia, la de Java se llama "Arrays". Pero de todas formas, no entiendo cómo no te daba fallos en el IDE donde programas con Java, ya que al copiarme tu código a mi espacio de trabajo eso era una sangría.

Por otra parte, dentro del código tienes tanto las correcciones que tuve que hacer para que me funcionara antes de nada en mi IDE y acto seguido, mi solución aportada.

Sé que todo esto que te he escrito solamente está relacionado con el problema base en sí, esto es, cómo ordenar un array de menor a mayor. Sin embargo, me gustaría responderte a lo que comentaste hacia el final del post. No te enfoques a una sola manera de resolver un problema, ya sea ordenar una array, sacar los primos de una lista de reales, o cómo sacar el índice del menor número de una lista usando la Búsqueda Binaria. En la programación hay más de un camino que lleva a Roma, y en el enlace de SO se puede apreciar eso.

Volviendo al código que proporciono es la que prefiero y sobretodo porque no me gusta "re inventar la rueda". Aquí tienes un enlace de alguien que tuvo tu misma duda y, como puedes ver, la gente aporta gran variedad de opciones.

CoduJ

  • Sin experiencia
  • *
  • Mensajes: 28
    • Ver Perfil
Re:Duda con un código - Java
« Respuesta #2 en: 21 de Julio 2020, 22:32 »
Citar
No me ha quedado del todo claro, pero creo que no entiendes cómo realizar el código para reordenar un array en Java.
Perdón si me explique mal; sé como realizar el código de ordenar un array, en este caso, con el método burbuja, tenía la pregunta del porqué hay un for() anidado.
Citar
Pasando a comentar, me gustaría saber qué es eso de "Array" en tu porción de código que pasaste antes, ya que a no ser que se trate de una clase tuya propia, la de Java se llama "Arrays". Pero de todas formas, no entiendo cómo no te daba fallos en el IDE donde programas con Java, ya que al copiarme tu código a mi espacio de trabajo eso era una sangría.
El nombre tan flojo de ese vector es porque ya había hecho un proyecto similar, este es solo una prueba. Estoy usando el IDE jGRASP.
Citar
Sé que todo esto que te he escrito solamente está relacionado con el problema base en sí, esto es, cómo ordenar un array de menor a mayor. Sin embargo, me gustaría responderte a lo que comentaste hacia el final del post. No te enfoques a una sola manera de resolver un problema, ya sea ordenar una array, sacar los primos de una lista de reales, o cómo sacar el índice del menor número de una lista usando la Búsqueda Binaria. En la programación hay más de un camino que lleva a Roma, y en el enlace de SO se puede apreciar eso.
Realmente siempre que tengo que solucionar un  problema trato de ser lo más original posible, sé que la programación es dinámica. En este caso quise saber cómo funciona este método de ordenamiento.
Citar
Volviendo al código que proporciono es la que prefiero y sobretodo porque no me gusta "re inventar la rueda". Aquí tienes un enlace de alguien que tuvo tu misma duda y, como puedes ver, la gente aporta gran variedad de opciones.
Gracias por la información y tu respuesta.

daenius

  • Sin experiencia
  • *
  • Mensajes: 24
    • Ver Perfil
Re:Duda con un código - Java
« Respuesta #3 en: 22 de Julio 2020, 09:40 »
Entonces tu solución al problema está en el link de SO que te dejé anteriormente. Tomando dicha página como ejemplo, aunque la respuesta ganadora es la primera, para mi gusto la que proporciona "spuente" es la más acertada a la hora de entenderla completamente:

El primer bucle for te recorre el array entero, pero para cada iteración, el segundo bucle recorre y comparar cada par de números adyacentes del array. Tomando de muestra el array que proporciona el usuario:

Código: [Seleccionar]
int [] a  = {7,2,4,8,3,9,1,5,10,6};
Y haciendo una pequeña traza de lo dicho:
Para la primera iteración del programa tendríamos lo siguiente:
i=0, es decir, el primer bucle está parado en la primera posición del array, "apuntando" al 7
j=1, es decir, el segundo bucle está parado en la segunda posición del aray, "apuntando" al 2

Código: [Seleccionar]
if (a[j - 1] > a[j]) {"Si el elemento en j-1, es decir, el 7, es mayor que el elemento que está en j, es decir, el 2"
entonces, se realiza el cambio de las variables. Esta metodología se denomina "asignación en paralelo". Se guarda el mayor elemento en una variable auxiliar, se cambia la menor donde estaba la mayor, y en donde estaba la menor antes, se mete lo guardado en la variable auxiliar, o séase, el mayor valor.

Para la segunda iteración en la traza:
i=0, nada cambia
j=2, es decir, apunta al 4
el array queda modificado así: {2,7,4,8,3,9,1,5,10,6};
En el "if" se comparan los elementos de las posiciones "j-1" y "j", respectivamente. Esto es, si el 7 es mayor que el 4.

Sin embargo, es necesario un primer bucle, aquel que va iterando sobre cada elemento del array, ya que, no necesariamente, el array se va a quedar perfectamente ordenado en la primera "vuelta", por así llamarla. Con el bucle anidado, o el más interno, comparamos pares de elementos consecutivos sí, pero, ¿ya queda ordenado de buenas el array? No.
Una vez que el segundo bucle haya terminado, la "i" del primer bucle cambia a "1" y ahora va estudiando los siguientes pares de numeros. Si te fijas, el orden respecto al estudio de los números ha cambiado y así, quién es menor y el mayor. Por ello mismo hace falta repetir esto "n" veces por "n-1" veces.
Y, a la vez, se van dejando a la izquierda la secuencia ordenada de números con cada iteración del bucle primero.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".