Dada una array de enteros, ordénela usando el algoritmo de clasificación de burbujas.

Descripción general de la clasificación de burbujas

Bubble sort es un establo, algoritmo de ordenación en el lugar nombrados por elementos más pequeños o más grandes, "burbujean" en la parte superior de la lista. Aunque el algoritmo es simple, es demasiado lento y poco práctico para la mayoría de los problemas, incluso en comparación con tipo de insercióny no se recomienda para entradas grandes.

La única ventaja significativa que tiene el tipo de burbujas sobre la mayoría de las otras implementaciones, incluso Ordenación rápida, pero no la ordenación por inserción, es la capacidad de detectar si la lista ya está ordenada. Cuando la lista ya está ordenada (en el mejor de los casos), la clasificación por burbujas se ejecuta en tiempo lineal.

¿Cómo funciona Bubble Sort?

Cada pasada de clasificación de burbujas recorre la lista que se va a clasificar, compara cada par de elementos adyacentes y los intercambia si están en el orden incorrecto. Al final de cada pasada, el siguiente elemento más grande "burbujeará" hasta su posición correcta. Estos pases a través de la lista se repiten hasta que no se necesitan intercambios, lo que indica que la lista está ordenada. En el peor de los casos, podríamos terminar haciendo una n-1 pasar, donde n es el tamaño de entrada.

               3     5     8     4     1     9    -2 
pass 1         3     5     4     1     8    -2     9
pass 2         3     4     1     5    -2     8     9
pass 3         3     1     4    -2     5     8     9
pass 4         1     3    -2     4     5     8     9
pass 5         1    -2     3     4     5     8     9
pass 6        -2     1     3     4     5     8     9

 
Se puede ver una ilustración detallada de cómo funciona cada pase. aquí.

Practice this algorithm

Implementación de clasificación por inserción

A continuación se muestra una implementación iterativa del algoritmo de clasificación de burbujas en C, Java y Python. La implementación se puede optimizar fácilmente observando que el n'th pasar encuentra el n'th elemento más grande y lo coloca en su lugar final. Entonces, el bucle interno puede evitar mirar el último n-1 elementos cuando se ejecuta para el n'th tiempo. Otra optimización es detener el algoritmo cuando el ciclo interno no hizo ningún intercambio.

C


Descargar  Ejecutar código

Resultado:

-2 1 3 4 5 8 9

Java


Descargar  Ejecutar código

Resultado:

[-2, 1, 3, 4, 5, 8, 9]

Python


Descargar  Ejecutar código

Resultado:

[-2, 1, 3, 4, 5, 8, 9]

El algoritmo de clasificación de burbujas también se puede implementar de forma recursivamente. A continuación se muestra la implementación recursivamente del algoritmo de clasificación de burbujas en C, Java y Python:

C


Descargar  Ejecutar código

Resultado:

-2 1 3 4 5 8 9

Java


Descargar  Ejecutar código

Resultado:

[-2, 1, 3, 4, 5, 8, 9]

Python


Descargar  Ejecutar código

Resultado:

[-2, 1, 3, 4, 5, 8, 9]

Rendimiento de clasificación por inserción

La complejidad de tiempo en el peor de los casos del tipo de burbuja es O(n2), dónde n es el tamaño de la entrada. El peor de los casos ocurre cuando la array se ordena de forma inversa. En el mejor de los casos, la complejidad temporal del tipo de burbuja es O(n). El mejor de los casos ocurre cuando la array ya está ordenada y el algoritmo se modifica para dejar de ejecutarse cuando el ciclo interno no realizó ningún intercambio. La implementación optimizada se puede ver aquí.

El espacio auxiliar utilizado por la versión iterativa es O(1) y O(n) por la versión recursivo para la pila de llamadas.

 
Referencias: https://en.wikipedia.org/wiki/Bubble_sort