Diferencia entre revisiones de «Ordenamiento de burbuja»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
Sin resumen de edición
Kn (discusión · contribs.)
m Revertidas 1 edición por 201.116.156.130 identificadas como vandalismo a la última revisión por Kn. (TW)
Línea 1: Línea 1:
El '''Ordenamiento de Burbuja''' ('''Bubble Sort''' en inglés) es un sencillo [[algoritmo de ordenamiento]]. Funciona revisando cada elemento de la lista que va a ser ordenada con el siguiente, intercambiándolos de posición si están en el orden equivocado. Es necesario revisar varias veces toda la lista hasta que no se necesiten más intercambios, lo cual significa que la lista está ordenada. Este [[algoritmo]] obtiene su nombre de la forma con la que suben por la lista los elementos durante los intercambios, como si fueran pequeñas "burbujas". También es conocido como el '''método del intercambio directo'''.
Dado que solo usa comparaciones para operar elementos, se lo considera un algoritmo de comparación, siendo el más sencillo de implementar.


== Descripción ==

Una manera simple de expresar el ordenamiento de burbuja en [[pseudocódigo]] es la siguiente:
{{Algoritmo|Ordenamiento de burbuja|
'''Procedimiento''' <math>{\it burbuja}\left(a_0,a_1,a_2,\ldots,a_{n-1}\right)</math>
:'''Haga lo siguiente:'''
::<math>{\it intercambio}\gets\mathbf{falso}</math>
::'''Para <math>i=0\,</math> hasta <math>n-2\,</math> haga lo siguiente:'''
:::'''Si <math>a_i>a_{i+1}\,</math> entonces:'''
::::<math>\left(a_i,a_{i+1}\right)\gets\left(a_{i+1},a_i\right)</math>
::::<math>{\it intercambio}\gets\mathbf{verdadero}</math>
:'''Repita mientras '''<math>{\it intercambio}=\mathbf{verdadero}</math>
}}

La instrucción <math>\left(a_i,a_{i+1}\right)\gets\left(a_{i+1},a_i\right)</math> significa que se debe intercambiar el valor de <math>a_i\,</math> con el de <math>a_{i+1}\,</math>. El algorítmo también puede ser expresado de manera equivalente como sigue:
{{Algoritmo|Ordenamiento de burbuja|
'''Procedimiento''' <math>{\it burbuja}\left(a_0,a_1,a_2,\ldots,a_{n-1}\right)</math>
:'''Para <math>i=0\,</math> hasta <math>n-2\,</math> haga lo siguiente:'''
::'''Para <math>j=i+1\,</math> hasta <math>n-1\,</math> haga lo siguiente:'''
:::'''Si <math>a_i>a_j\,</math> entonces:'''
::::<math>\left(a_i,a_j\right)\gets\left(a_j,a_i\right)</math>
}}

== Análisis ==
[[Archivo:Bubble sort animation.gif|frame|right|Ejemplo del ordenamiento de burbuja ordenando una lista de números aleatorios.]]

=== Rendimiento en casos óptimos ===
El ordenamiento de burbuja tiene una complejidad [[Cota inferior asintótica|'''Ω''']](n²). Cuando una lista ya está ordenada, a diferencia del ordenamiento por inserción que pasará por la lista una vez, y encontrará que no hay necesidad de intercambiar las posiciones de los elementos, el método de ordenación por burbuja esta forzado a pasar por dichas comparaciones, lo que hace que su complejidad sea cuadratica en el mejor de los casos, esto lo cataloga como el '''algoritmo mas ineficiente''' que existe aunque para muchos programadores sea el más sencillo de implementar.

=== Conejos y Tortugas (Yo-yos) ===<!-- linked desde [[Ordenamiento Par-Impar]] -->
La posición de los elementos en el ordenamiento de burbuja juegan un papel muy importante en la determinación del rendimiento. Los elementos mayores al principio de la lista son rápidamente movidos hacia abajo. En cambio, elementos menores en el fondo de la lista, se mueven a la parte superior muy lentamente. Esto llevó a nombrar estos elementos ''conejos'' y ''tortugas'', respectivamente.

Varios esfuerzos se han realizado para eliminar las tortugas '' véase Exterminación'' y mejorar la velocidad del ordenamiento de burbuja, la cual será más redonda que nunca. El [[Cocktail sort|Ordenamiento por sacudida]] es un buen ejemplo, aunque aún mantiene, en el peor de los casos, una complejidad ''O (n<sup>2</sup>)''. El [[Comb sort|ordenamiento por combinación]] compara los elementos primero en pedazos grandes de la lista, moviendo tortugas extremadamente rápido, antes de proceder a pedazos cada vez más pequeños para alisar la lista. Su velocidad promedio es comparable a algoritmos rápidos (y complejos) como el [[Quicksort|ordenamiento rápido]] <!-- Falta poner sus variaciones, incluyendo recorrer la lista en sentido inverso, y [[shellsort]]
=P
w/e --->

== En la práctica ==
A pesar de que el ordenamiento de burbuja es uno de los algoritmos más sencillos de implementar, su orden ''O (n<sup>2</sup>)'' lo hace muy ineficiente para usar en listas que tengan más que un número reducido de elementos. Incluso entre los algoritmos de ordenamiento de orden ''O (n<sup>2</sup>)'', otros procedimientos como el [[Ordenamiento por inserción]] son considerados más eficientes.

Dada su simplicidad, el ordenamiento de burbuja es utilizado para introducir el concepto de algoritmo, o de algoritmo de ordenamiento para estudiantes de [[ciencias de la computación]]. Aunque algunos investigadores como Owen Astrachan han criticado al ordenamiento de burbuja y su popularidad en la educación de la computación, recomendando que ya no debe ser enseñado.

El ordenamiento de burbuja es [[Cota superior asintótica|asintóticamente]] equivalente, en tiempos de ejecución con el [[Ordenamiento por inserción]] en el peor de los casos, pero ambos algoritmos difieren principalmente en la cantidad de intercambios que son necesarios. Resultados experimentales, como los descubiertos por Astrachan han demostrado que el ordenamiento por inserción funcionan considerablemente mejor incluso con listas aleatorias. Por esta razón, muchos libros de algoritmos modernos evitan usar el ordenamiento de burbuja, utilizando en cambio el ordenamiento por inserción.

El ordenamiento de burbuja interactúa vagamente con el [[hardware]] de las CPU modernas. Requiere al menos el doble de escrituras que el ordenamiento por inserción, el doble de pérdidas de cache, y asintóticamente más [[Predictor de saltos|predicción de saltos]]. Varios experimentos, hechos por Astrachan, de ordenamiento de cadenas en Java, muestran que el ordenamiento de burbuja es 5 veces más lento que el [[ordenamiento por inserción]] y 40% más lento que el [[ordenamiento por selección]].En conclusion esto no se usa en la actualidad para realizar ordenaciones eficaces

== Véase también ==

* [[Algoritmo de ordenamiento]]

== Enlaces externos ==
<!-- *(enlace roto) [http://www.it.uc3m.es/java/ordenacion/BubbleSort.html Animación de Algoritmo de Ordenamiento Bubble Sort] - Implementación en Java -->
* [http://www.mis-algoritmos.com/wp-content/uploads/2006/08/burbuja.php Demostración de su implementación]
* [http://www.algorithm-code.com/wiki/Bubble_sort Bubble sort code]
* [http://tutorial-python.com.ar/?p=58 Burbuja básico y mejorado en Python]

[[Categoría:Algoritmos de ordenamiento]]


[[ar:ترتيب الفقاعات]]
[[ar:ترتيب الفقاعات]]

Revisión del 23:32 4 dic 2009

El Ordenamiento de Burbuja (Bubble Sort en inglés) es un sencillo algoritmo de ordenamiento. Funciona revisando cada elemento de la lista que va a ser ordenada con el siguiente, intercambiándolos de posición si están en el orden equivocado. Es necesario revisar varias veces toda la lista hasta que no se necesiten más intercambios, lo cual significa que la lista está ordenada. Este algoritmo obtiene su nombre de la forma con la que suben por la lista los elementos durante los intercambios, como si fueran pequeñas "burbujas". También es conocido como el método del intercambio directo. Dado que solo usa comparaciones para operar elementos, se lo considera un algoritmo de comparación, siendo el más sencillo de implementar.

Descripción

Una manera simple de expresar el ordenamiento de burbuja en pseudocódigo es la siguiente:

Algoritmo Ordenamiento de burbuja

Procedimiento

Haga lo siguiente:
Para hasta haga lo siguiente:
Si entonces:
Repita mientras

La instrucción significa que se debe intercambiar el valor de con el de . El algorítmo también puede ser expresado de manera equivalente como sigue:

Algoritmo Ordenamiento de burbuja

Procedimiento

Para hasta haga lo siguiente:
Para hasta haga lo siguiente:
Si entonces:

Análisis

Ejemplo del ordenamiento de burbuja ordenando una lista de números aleatorios.

Rendimiento en casos óptimos

El ordenamiento de burbuja tiene una complejidad Ω(n²). Cuando una lista ya está ordenada, a diferencia del ordenamiento por inserción que pasará por la lista una vez, y encontrará que no hay necesidad de intercambiar las posiciones de los elementos, el método de ordenación por burbuja esta forzado a pasar por dichas comparaciones, lo que hace que su complejidad sea cuadratica en el mejor de los casos, esto lo cataloga como el algoritmo mas ineficiente que existe aunque para muchos programadores sea el más sencillo de implementar.

Conejos y Tortugas (Yo-yos)

La posición de los elementos en el ordenamiento de burbuja juegan un papel muy importante en la determinación del rendimiento. Los elementos mayores al principio de la lista son rápidamente movidos hacia abajo. En cambio, elementos menores en el fondo de la lista, se mueven a la parte superior muy lentamente. Esto llevó a nombrar estos elementos conejos y tortugas, respectivamente.

Varios esfuerzos se han realizado para eliminar las tortugas véase Exterminación y mejorar la velocidad del ordenamiento de burbuja, la cual será más redonda que nunca. El Ordenamiento por sacudida es un buen ejemplo, aunque aún mantiene, en el peor de los casos, una complejidad O (n2). El ordenamiento por combinación compara los elementos primero en pedazos grandes de la lista, moviendo tortugas extremadamente rápido, antes de proceder a pedazos cada vez más pequeños para alisar la lista. Su velocidad promedio es comparable a algoritmos rápidos (y complejos) como el ordenamiento rápido

En la práctica

A pesar de que el ordenamiento de burbuja es uno de los algoritmos más sencillos de implementar, su orden O (n2) lo hace muy ineficiente para usar en listas que tengan más que un número reducido de elementos. Incluso entre los algoritmos de ordenamiento de orden O (n2), otros procedimientos como el Ordenamiento por inserción son considerados más eficientes.

Dada su simplicidad, el ordenamiento de burbuja es utilizado para introducir el concepto de algoritmo, o de algoritmo de ordenamiento para estudiantes de ciencias de la computación. Aunque algunos investigadores como Owen Astrachan han criticado al ordenamiento de burbuja y su popularidad en la educación de la computación, recomendando que ya no debe ser enseñado.

El ordenamiento de burbuja es asintóticamente equivalente, en tiempos de ejecución con el Ordenamiento por inserción en el peor de los casos, pero ambos algoritmos difieren principalmente en la cantidad de intercambios que son necesarios. Resultados experimentales, como los descubiertos por Astrachan han demostrado que el ordenamiento por inserción funcionan considerablemente mejor incluso con listas aleatorias. Por esta razón, muchos libros de algoritmos modernos evitan usar el ordenamiento de burbuja, utilizando en cambio el ordenamiento por inserción.

El ordenamiento de burbuja interactúa vagamente con el hardware de las CPU modernas. Requiere al menos el doble de escrituras que el ordenamiento por inserción, el doble de pérdidas de cache, y asintóticamente más predicción de saltos. Varios experimentos, hechos por Astrachan, de ordenamiento de cadenas en Java, muestran que el ordenamiento de burbuja es 5 veces más lento que el ordenamiento por inserción y 40% más lento que el ordenamiento por selección.En conclusion esto no se usa en la actualidad para realizar ordenaciones eficaces

Véase también

Enlaces externos