¿La ordenación por inserción es mejor que la ordenación por burbuja?

Estoy haciendo mi revisión para el examen.

Me gustaría saber bajo qué condición la ordenación por inserción funciona mejor que la ordenación por burbujas dada la misma complejidad de caso promedio de O (N ^ 2).

Encontré algunos artículos relacionados, pero no puedo entenderlos.

¿A alguien le importaría explicarlo de una manera sencilla?

preguntado el 03 de mayo de 12 a las 10:05

5 Respuestas

La ventaja de bubblesort está en la velocidad de detección de una lista ya ordenada:

Escenario del mejor caso de BubbleSort: O (n)

Sin embargo, incluso en este caso, la ordenación por inserción obtuvo un rendimiento mejor/igual.

Bubblesort es, más o menos, solo bueno para comprender y/o enseñar el mecanismo del algoritmo de clasificación, pero no encontrará un uso adecuado en la programación en estos días, debido a su complejidad.

O (n²)

significa que su eficiencia disminuye drásticamente en listas de más de un pequeño número de elementos.

Respondido 09 Abr '15, 10:04

"bubblesort solo es bueno para comprender y/o enseñar el mecanismo del algoritmo de clasificación", diría yo, ni siquiera eso. La ordenación por inserción no es más difícil de entender ni mucho más difícil de codificar. Bubble sort tiene una ventaja muy específica, que es probablemente la clasificación más eficiente para un tipo particular de almacenamiento que no tiene acceso aleatorio. Almacenamiento de tambores, creo, donde el tambor gira a velocidad constante en una sola dirección. Entonces supera a la ordenación por inserción porque la ordenación por inserción necesita "mirar hacia atrás", lo cual es muy lento. ¡Esta ventaja rara vez tiene un uso práctico en estos días! - steve jesop

Me vinieron a la mente las siguientes cosas:

  1. La ordenación de burbuja siempre toma una pasada más sobre la matriz para determinar si está ordenada. Por otro lado, la clasificación por inserción no necesita esto: una vez que se inserta el último elemento, el algoritmo garantiza que la matriz esté ordenada.

  2. La ordenación de burbujas hace n comparaciones en cada pasada. La ordenación por inserción hace menos que n comparaciones: una vez que el algoritmo encuentra la posición donde insertar el elemento actual, deja de hacer comparaciones y toma el siguiente elemento.

  3. Finalmente, cita de Wikipedia artículo:

Bubble sort también interactúa mal con el hardware de CPU moderno. Requiere al menos el doble de escrituras que la ordenación por inserción, el doble de errores de caché y asintóticamente más predicciones erróneas de bifurcación. Los experimentos de clasificación de cadenas de Astrachan en Java muestran que la clasificación por burbuja es aproximadamente 5 veces más lenta que la clasificación por inserción y un 40 % más lenta que la clasificación por selección

Puede encontrar un enlace al trabajo de investigación original allí.

respondido 29 mar '17, 08:03

gracias Víctor Encontré los primeros 2 puntos realmente útiles. Ahora entiendo que una diferencia fundamental entre los 2 algoritmos es la cantidad de comparaciones requeridas. Salud - Jonathan

El segundo punto parece no ser correcto. Sí, algunos algoritmos hacen eso. Pero creo que en el algoritmo de clasificación de burbujas correcto, el ciclo interno se ejecuta n-2, n-1, n-2 ... veces en cada iteración del ciclo externo. - Maduranga Siriwardena

Supongo que la respuesta que estás buscando es aquí:

La ordenación de burbujas también se puede usar de manera eficiente en una lista que ya está ordenada, excepto por una cantidad muy pequeña de elementos. Por ejemplo, si solo un elemento no está en orden, la ordenación de burbuja tomará solo 2n tiempo. Si dos elementos no están en orden, la ordenación de burbujas tomará solo 3n tiempo como máximo...

y

La ordenación por inserción es un algoritmo de ordenación simple que es relativamente eficiente para listas pequeñas y en su mayoría listas ordenadas, y a menudo se usa como parte de algoritmos más sofisticados.

contestado el 03 de mayo de 12 a las 10:05

así, por ejemplo, una lista mayormente ordenada: por ejemplo, [ 2,3,4,5,1] la ordenación de burbujas necesita 4 intercambios y 4 comparaciones La ordenación por inserción necesita 4 intercambios y 4 comparaciones también. ¿Entonces cuál es la diferencia? - Jonathan

en ese ejemplo particular no hay diferencia :) - MarcoS

¿Podría proporcionar enlaces a los artículos relacionados que no entiende? No estoy seguro de qué aspectos podrían estar abordando. Aparte de eso, existe una diferencia teórica que podría ser que la ordenación por burbujas es más adecuada para colecciones representadas como matrices (que para aquellas representadas como listas vinculadas), mientras que la ordenación por inserción es adecuada para listas vinculadas.

El razonamiento sería que la ordenación por burbujas siempre intercambia dos elementos a la vez, lo cual es trivial tanto en la matriz como en la lista vinculada (más eficiente en las matrices), mientras que la ordenación por inserción se inserta en un lugar de una lista dada, lo cual es trivial para las listas vinculadas pero implica moviendo todos los elementos subsiguientes en una matriz a la derecha.

Dicho esto, tómalo con pinzas. En primer lugar, ordenar arreglos es, en la práctica, casi siempre más rápido que ordenar listas enlazadas. Simplemente debido al hecho de que escanear la lista una vez ya tiene una enorme diferencia. Aparte de eso, mover n elementos de una matriz hacia la derecha es mucho más rápido que realizar n (o incluso n/2) intercambios. Es por eso que otras respuestas afirman correctamente que el tipo de inserción es superior en general, y por qué realmente me pregunto sobre los artículos que lees, porque no puedo pensar en una forma simple de decir que esto es mejor en los casos A, y eso es mejor en los casos B.

contestado el 03 de mayo de 12 a las 11:05

La ordenación por burbujas puede ser más adecuada para matrices que la ordenación por burbujas para listas vinculadas, pero la ordenación por burbujas no es más adecuada para matrices que la ordenación por inserción para matrices. - steve jesop

Sí, tal vez no fui lo suficientemente claro en el último párrafo. La cuestión es que la ordenación por burbujas es conceptualmente trivial en matrices, mientras que la ordenación por inserción no lo es ("mover todo de x a la derecha"). Aún así, es cierto que esto no hace que la clasificación de burbujas sea más rápida. - b.buchhold

En el peor de los casos, ambos tienden a funcionar en O (n ^ 2)

En el mejor de los casos, es decir, cuando la matriz ya está ordenada, la clasificación por burbuja puede funcionar en O(n).

respondido 22 nov., 18:15

La ordenación de burbujas se puede optimizar para ejecutarse en tiempo de ejecución O(n) en el mejor de los casos. - Maduranga Siriwardena

Tanto la burbuja como la inserción tienen la misma complejidad para el peor/promedio/el mejor de los casos, que es O(n^2) y también la complejidad del espacio es O(n) para ellos. - Levent Divilioglu

@LeventDivilioglu En el mejor de los casos, Bubble Sort puede funcionar en O (n). Podemos modificar la ordenación de burbujas de tal manera que si no se producen intercambios durante la primera iteración, podemos detener las comprobaciones porque la lista ya está ordenada. - Vineeth Chitteti

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.