El algoritmo de la burbuja (buble sort

)
El algoritmo de ordenación por el método de la burbuja, también conocido como
intercambio directo, es uno de los más simples que se conocen.
Se basa en una serie de intercambios entre elementos adyacentes. Esos
intercambios dan la impresíón de que cada elemento va ascendiendo a través del
array acercándose cada vez más a su posición final, recordando a cómo
ascienden las burbujas de gas en un líquido.
A efectos prácticos, el algoritmo de la burbuja no es adecuado prácticamente para
ninguna situación, ya que realiza muchas comparaciones y muchos intercambios.
Los hay similares que se comportan bastante mejor. Su interés es más bien
teórico, ya que sirve para establecer comparativas con otros métodos y extraer
conclusiones teóricas.
No obstante, es un algoritmo sencillo y vistoso que se sigue viendo en casi
cualquier curso o asignatura de programación. Muchos profesores prefieren no
perder tiempo con este algoritmo en las clases de programación... bueno... quizá
sea una decisión acertada. Sin embargo, es uno de los imprescindibles en
algoritmia... así que vamos a echarle un vistazo.
Este algoritmo se basa en hacer comparaciones, así que para que realice su
trabajo de ordenación son imprescindibles dos cosas: un array o estructura similar
de elementos comparables y un criterio claro de comparación, tal que dados dos
elementos nos diga si están en orden o no. (ver Algoritmos de ordenación).
Es un algoritmo estable de ordenación interna, y su complejidad temporal en el
peor caso es de O(n2), mientras que en el mejor caso -que el array ya esté
totalmente ordenado- puede llegar a Ω(n) siendo n el tamaño del array a ordenar.
En cuanto a la complejidad espacial, es muy ahorrativo: tan solo necesita una
variable temporal para realizar los intercambios, así que su gasto de memoria es
constante, sea cual sea el tamaño del array.
El algoritmo consiste en realizar varias pasadas sobre el array, logrando que en
cada pasada el elemento de mayor valor se coloque al final del array. Para
lograrlo, en cada pasada es necesario recorrer el array realizando comparaciones
e intercambios. Por eso, se suele implementar con dos bucles, uno anidado dentro
del otro. El bucle exterior realiza las pasadas y el interior recorre el array
realizando comparaciones e intercambios.
Vamos a intentar ver informalmente el funcionamiento del algoritmo. Supondremos
que el array tiene n elementos.

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

49 → Comparar 52 y 37 (3º y 4º). comparando cada elemento con el siguiente. 49 → seguimos 45. 37. Seguimos. Al término de la segunda pasada quedará también en orden el penúltimo elemento del array. logrando que el mayor de ellos vaya ascendiendo por el array. 37. 49 → Comparar 52 y 21.. No están en orden. En la tercera pasada haremos lo mismo con los n3 primeros elementos. No llegaremos a hacer ninguna comparación que implique al último elemento del array. 21. 21. ya que será el más pequeño de todos. 37. 37. n=5 1ª pasada: comparamos cada uno de los cuatro primeros (n-1) con los que le siguen. 45. 52. 21. hasta que tengamos colocados los n-1 últimos elementos. 45. En la segunda pasada. 37. porque sabemos que ese ya lo colocó en orden la primera pasada. 52. 49 → Comparar 52 y 49. No están en orden. 21. compararemos cada uno de los n-2 primeros elementos con el siguiente. 52. 49. Intercambio. y así sucesivamente. 52 → El 5º elemento ya está en su sitio. 52. Si un elemento no está en orden con respecto al siguiente. . 45. 21. El elemento de mayor valor (52) irá "ascendiendo" hasta la última posición. y si un elemento y el siguiente no están en orden. el primer elemento también estará en orden. En cada pasada recorreremos el array empezando por el principio hasta un cierto punto. así pues. logrando colocar el antepenúltimo elemento. y lograremos que en la última posición se coloque el mayor de ellos.. los intercambiamos de posición. Intercambio. 45. 37. (2º y 3º) No están en orden. los intercambiamos de sitio y seguimos. 49 → seguimos 45. compararemos cada uno de los n-1 primeros elementos con el siguiente. 37. Cuando estemos en esa situación. 52. 37. 52 → Ya hemos terminado esta pasada. 37. Supongamos que queremos ordenar estos valores con el algoritmo de la burbuja: 45. 49 → Comparar 45 y 52. 21. 49. 45. 21. 21.    no n es que si en cada pasada logramos ordenar un elemento. 21. 52. 49. Intercambio. 52. 45. cuando tengamos en orden los n-1 del final del array el elemento que queda es necesariamente el más pequeño de todos. (4º y 5º). En la primera pasada. Vemos un ejemplo sencillo. (1º y 2º) Están en orden.

37. 45. 52 → Ya tenemos tres en orden. 52 → seguimos 21. 45. 21. 49. 45. Están en orden. 37. 21. 52 → El 4º elemento ya está en su sitio. porque la primera pasada hizo que el mayor de todos los elementos ocupara la última posición. 21. 21. No están en orden. 49. 37. 49. el primero también lo está. 21. Pasada terminada. 37. 45. 52 → Comparar 1º y 2º. 52 → Así pues. Están en orden. Intercambio. 37. 49. 37. 45. 3ª pasada: Comparamos cada uno de los dos primeros (n-3) con los siguientes. 49. sabemos que ese ya está en su sitio. 52 → seguimos 21. 21. . Pasada terminada. 52 → 1º y 2º. 49. 4ª y última pasada: Comparamos el primero con el segundo. 45. pero algoritmicamente. Seguimos. 52 → Comparar 3º y 4º. 21. 49. Intercambio. 49. 45. Están en orden. 45. 49. 52 → 2º y 3º. 21. No están en orden. 37. 21. 52 → Comparar 2º y 3º. 37. 45. Trabajaremos sólo con los cuatro que quedan. 37. 45. 45. 45. 49. 37. (Fíjate en que el array ya está en orden. 52 → Ya tenemos los cuatro últimos en orden. 37. 49.2ª pasada: comparamos cada uno de los tres primeros (n-2) con los que le siguen. 49. Pasada terminada. 37. 21. eso no lo sabemos). 52 → 1º y 2º están en orden. No llegamos a hacer comparaciones que involucren al 5º elemento. con lo cual.