Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Duda sencilla sobre Algoritmo Ordenación Burbuja.

Hola a tod@s,
es una pregunta sencilla pero no me queda del todo claro... (estaré ofuscado o no se...)
Es sobre el algoritmo de ordenación en Burbuja. El código es el siguiente:


public static void burbuja(int [] A){
int i, j, aux;
for(i=0;i<A.length-1;i++)
for(j=0;j<A.length-i-1;j++)
if(A[j+1]<A[j]){
aux=A[j+1];
A[j+1]=A[j];
A[j]=aux;
}
}

Lo que no me queda muy claro porque en el bucle más exterior empieza en 0 y llega hasta A.length-1-1(por el <) o algunos ponen i=1;i<A.length, es decir...se come una iteración...por qué????? No me queda muy claro.
Gracias.
Saludos.

febrero 24, 2013 | Unregistered Commentershao

Aquí tienes dos excelentes artículos, con numerosos ejemplos comentados, sobre este tipo de algoritmo:

http://en.literateprograms.org/Bubble_sort_(Java)
http://www.leepoint.net/notes-java/data/arrays/32arraybubblesort.html

febrero 24, 2013 | Registered Commenterchoces

hola @shao, es por lo de j+1 , si pusiera hasta i<A.length, tendría un error a al acceder al vector en una posición que no existe. lo mismo pasa con el interno por eso es j<A.length-i-1

ejemplo: supón que el tamaño de A=5;

en la primera interacion : i=0
y el ultimo valor que j alcansario en esta interacion seria 5-0-1=4 y como j debe ser menor que esto entonces j=3.

ahora en el cuerpo del for sustituyendo valores tienes esto:

if(A[3+1]<A[3]){
aux=A[3+1];
A[3+1]=A[3];
A[3]=aux;
}

y por esa razón los limites del for son esos.

febrero 24, 2013 | Registered Commenterjhosep

Hola Joseph lo que tu dices es para el bucle interno... el de la j y se subsana poniendo esta condición en el segundo bucle o bucle interno j<A.length-i-1, pero en el primer bucle o bucle más exterior eso no le afecta...ya que j empieza en 0 y llega hasta A.length-1-1(<)-i...
aguien me ayuda?

febrero 24, 2013 | Unregistered Commentershao

Indagando un poco he obtenido la respuesta....ahí os la dejo:
En el bucle más externo, realizaremos n-1 pasadas. En cada una de ellas lograremos que el elemento de mayor valor se sitúe al final. El motivo de realizar n-1 pasadas y no n es que si en cada pasada logramos ordenar un elemento, cuando tengamos en orden los n-1 del final del array, el elemento que queda es necesariamente el más pequeño de todos.

febrero 24, 2013 | Unregistered Commentershao