- ¿Qué es una base de datos? - noviembre 7, 2020
- ¿Es la programación una profesión para ti? - septiembre 3, 2020
- Temporada 2020-2021 - julio 15, 2020
Introducción
Llevo mucho tiempo pensando en escribir un artículo de este tipo. Muchos de los que nos dedicamos a la programación hemos ido dejando de utilizar ciertos algoritmos y ciertas técnicas de programación delegando todo en los frameworks que utilizamos en nuestros desarrollos.
Desde mi punto de vista, existen algoritmos que hace que la mente de los programadores se desarrolle mejor, tengan mejor visión a la hora de hacer las cosas y tengan mentes mucho más creativas. ¡Por ello se encuentran a la orden del día en las carreras universitarias!
Con el artículo voy a explicarte qué son los algoritmos de ordenación y voy a adentrarme en uno de ellos, concretamente en el algoritmo de ordenación de burbuja.
¡Empecemos!
Algoritmos de Ordenación
Vas a entender un algoritmo de ordenación como un proceso en el que partiendo de una lista de elementos se quiere conseguir el objetivo de establecer un orden entre ellos permutando la posición que ocupan dentro de esa lista. Voy a enseñártelo gráficamente con un conjunto de números enteros:
En todos los algoritmos de ordenación tienes que tener en cuenta lo siguiente:
- Los datos de los elementos pueden ser simples o complejos.
- Tienes que establecer un elemento (simple o complejo) como clave a la hora de llevar a cabo la ordenación.
- Dentro del conjunto de datos que vas a ordenar pueden existir elementos duplicados.
Existen multitud de algoritmos de ordenación, aquí te pongo un pequeño resumen de los más básicos y característicos:
- Selección: En cada iteración, se selecciona el menor elemento del subvector no ordenado y se intercambia con el primer elemento de este subvector:
- Inserción: En cada iteración, se inserta un elemento del subvector no ordenado en la posición correcta dentro del subvector ordenado
- Burbuja: Este algoritmo lo veremos en detalle en el siguiente apartado.
- Mergesort: Es un algoritmo de ordenación divide y vencerás, ordena por separado dos listas y después las une en una lista ordenada en un proceso que recorre ambas listas a la vez.
- Quicksort: El algoritmo realiza la ordenación utilizando un pivote de la lista de elementos a ordenar, dejando a su izquierda todos los elementos menores que él y a la derecha aquellos que son mayores.
- Heapsort: El algoritmo pertenece a la familia de selección, pero se basa en la construcción de un árbol parcialmente ordenado para realizar la ordenación.
Algoritmo Burbuja
Estoy completamente seguro que te has preguntado que por qué voy a explicarte este algoritmo y que qué tiene de especial respecto a los otros del listado que te he puesto en el punto anterior, la respuesta es muy simple: ¡Es el más sencillo y el primero que debes aprender!
El algoritmo Burbuja consiste en ir recorriendo la lista, elemento a elemento, e ir intercambiado un elemento con el adyacente en el caso de que sea mayor el primero que el segundo. El nombre del algoritmo viene del proceso que ejecuta, el elemento mayor va ascenciendo a modo burbuja al primer lugar de la lista. ¡Voy a enseñarteun ejemplo!:
El ejemplo consiste en una iteración del algoritmo aplicado a la lista de elementos del apartado anterior.
En la parte izquierda tienes resaltados los dos elementos que van a compararse y en la parte derecha el resultado de la comparación, en caso de que se hayan intercambiado el color de los elementos te los he remarcado en color verde, y en caso contrario en morado:
El algoritmo se repetiría tantas veces como elementos tiene la lista, y obtendrías la lista ordenada de menor a mayor.
¡Veamos el código fuente!
Código fuente
El código fuente recorre la lista de elementos desordenada intercambiando los elementos en el caso que corresponda. Para un mayor entendimiento del algoritmo he creado un método que muestra la lista de elementos, de esta forma podrás comprobar como progresa el algoritmo.
La salida por pantalla de la ejecución del programa es la siguiente:
Tal y como has podido comprobar por las salidas de cada iteración que muestra, el algoritmo puede optimizarse, ya que podemos controlar si existe una iteración sin cambios, en ese caso, el algoritmo habrá terminado de completar la ordenación de la lista. El código quedaría así:
¡¡Puedes descargarte el código fuente de nuestro repositorio en GitHub!!
Clic AQUÍ!
Conclusiones
Con este artículo has podido comprobar que existen algoritmos específicos para realizar ordenación de listas de elementos y has realizado la implementación del, desde mi punto de vista, más sencillo de todos ellos.
Mi experiencia me dice que la algoritmia hay que entrenarla, que si quieres ser un buen desarrollador tienes que saber solventar problemas difíciles que presenten retos de una forma autónoma, sin utilizar elementos externos que los resuelvan sólos de forma automática.
¿Te animas a entrenar la algoritmía?