Ordenamiento por Intercambio
(Bubble Sort)

Unidad de Apoyo para el Aprendizaje

Iniciar

Introducción


Cuando eras pequeño, probablemente, te tocó formarte por estaturas, de manera que los de menor quedaran enfrente de la fila y los de mayor atrás; para lograrlo se tenían que comparar las estaturas y de esa manera tener la certeza de quién era mayor a quién; si todos eran más o menos de la misma estatura se tenían que comparar uno a uno, con todos los de la fila, para ir haciendo el acomodo, y así todos quedaran formados del más bajo al más alto; más o menos, de esta forma funciona el ordenamiento por intercambio.



Personas formadas

Ordenar.



El estudio de este tema te permitirá:

Generar un código de programación, a partir del reconocimiento de las características del método de ordenación por intercambio, para manipular datos y solucionar diferentes tipos de problemas.

Método de ordenación por intercambio


Imagina que de un conjunto de datos o elementos introduces y aíslas dos de ellos en una burbuja inteligente, como si fueran los únicos en el mundo. La burbuja descubre cuál de los dos elementos es mayor y los intercambia, si es necesario; de manera que deja al menor del lado izquierdo y al mayor del lado derecho.

Con la microoperación explicada anteriormente, nuestra burbuja inteligente sólo ordenó dos elementos, de menor a mayor; sin embargo, dicha operación puede aplicarse varias veces (sobre un arreglo o lista de elementos) hasta dejar todos los elementos ordenados.

El ordenamiento por intercambio o bubble sort funciona de la siguiente manera:





En relación a lo anterior, podemos decir que el algoritmo bubble sort consiste en comparar pares de elementos adyacentes e intercambiarlos entre sí hasta que estén todos ordenados; este método también es conocido como intercambio directo.

Ejemplo:

Sea un arreglo de seis números de empleados:



La complejidad de este algoritmo es de O(n2), donde n es el número de elementos del arreglo o lista.

Primera pasada:







Como puedes ver, el elemento mayor siempre es llevado hasta el final del arreglo en cada pasada.

Segunda pasada:







Ya están ordenados, pero para comprobarlo habría que acabar esta segunda vuelta y hacer una tercera en la que veremos que no hubo intercambios, y de esa manera sabremos que el arreglo ya está ordenado.

Para su implementación, generalmente, definimos una función donde:



A = arreglo
N = tamaño


Observa la siguiente imagen:

Declaración de la función de ordenamiento por Bubble Sort

Declaración de la función de ordenamiento por bubble sort.





En la declaración de código anterior de la función bubble sort utilizamos dos ciclos for anidados con los índices i y j para ir comparando y ordenando los elementos durante el recorrido del arreglo.

Como puedes observar, en la implementación dimos N vueltas al arreglo, pero la implementación se puede mejorar si cada vez que das una vuelta compruebas si el arreglo ya está ordenado; en ese caso ya no se darán más vueltas y se da por terminado el ordenamiento.

Haciendo el análisis de eficiencia de este método, podemos ver que es el más fácil de implementar; sin embargo, si se cuenta con un mayor volumen de datos se vuelve ineficiente; ése es un rasgo que te permitirá saber si será el correcto a utilizar o no.

Así pues, partiendo de un número (n) de elementos, en el método bubble sort tendremos comparaciones consecutivas entre pares de números, de tal manera que:



•En la primera pasada tendremos (N-1) comparaciones.
•En la segunda (N-2).
•Así sucesivamente hasta llegar a 2 y 1 comparaciones entre elementos, dependiendo de tamaño del arreglo.


Por lo anterior, podemos ver que no es un algoritmo recomendado para una gran cantidad de elementos, ya que, en promedio, y en el peor de los casos, su complejidad es O(nn) y en el mejor de los casos es O(n); donde n es el número de elementos a ordenar.

Actividad. Características del método de ordenamiento por intercambio

La idea principal en cuanto al método de ordenamiento por intercambio es comparar elementos para irlos colocando en orden.

Autoevaluación. Programación del método de ordenamiento por intercambio

La programación de este método es la más sencilla, la base es hacer dos ciclos for anidados.

Fuentes de información

Básicas

Bibliografía

Domínguez, E. (2014). Programación estructurada: raptor y lenguaje C. México: Alfaomega.

Guardati, S. (2015). Estructuras de datos básicas: programación orientada a objetos con Java. México: Alfaomega.

Joyanes, L. (1998). Fundamentos de Programación: algoritmos y estructuras de datos. España: McGraw-Hill.

Kalicharan, N. (2013). Advanced topics in C: core concepts in data structures. Berkeley, California: Apress.

López, B. (2012). Estructuras de datos orientadas a objetivos: pseudocódigo y aplicaciones en C#.NET. México: Alfaomega.

López, B. (2015). Estructuras de datos orientadas a objetos. México: Alfaomega.

Maes, R. (2013). Physically unclonable functions: constructions, properties and applications. Berlin: Springer.

Malik, D. (2013). Estructura de datos con C++. México: Cengage Learning.

Weiss, M. (2012). Data structures and algorithm analisis in Java: Estados Unidos: Addison-Wesley.

Documentos electrónicos

Martínez, J. y Castro, R. (2012). Programación (Estructura de datos) [Versión electrónica]. México: SUAyED–FCA, UNAM. Consultado el 15 de septiembre de 2017 de http://fcasua.contad.unam.mx/apuntes/interiores/docs/20172/informatica/3/apunte/LI_1361_30096_A_Prog_estruc_datos_V1.pdf

Complementarias

López, A. (2011). Estructura de datos con JAVA: un enfoque práctico. México: UNAM-Facultad de Ciencias.

Luján, S., Ferrández, A., Peral, J., y Requena, A. (2014). Ejercicios resueltos sobre programación y estructuras de datos. España: Publicaciones de la Universidad de Alicante.

Mora, A. (2014). Bases de datos: diseño y gestión. España: Síntesis.

Weiss, M. (2013). Estructuras de datos en Java. Madrid: Pearson.

.

Cómo citar

Texto correspondiente a esta sección.