Ordenamiento de objetos con el método Burbuja

 


Existen varios algoritmos de ordenamiento  pero todos ellos o la gran mayoría ordenan valores numéricos ya sea por selección, intercambio, inserción etc. En los lenguajes orientados a objetos una valor numérico almacenada en una variable es una instancia de una clase int pero cuando tenemos un valor numérico guardado en un atributo de instancia la cosa cambia un poco.

La mayoría de lenguajes implementan una método y/o clase llamado sort.


Reverse lo que va hacer es invertir la lista algo que en python puedes lograr el mismo objetivo con la siguiente instrucción print(lista_desordenada[::-1]). La lista debe estar ordenada.

Ahora para ordenar objetos que no sean enteros ese método no nos sirve. Es acá donde el ordenamiento burbuja u otro  algoritmo de ordenamiento nos es muy útil.

Algoritmo de ordenamiento burbuja


Tenemos un procedimiento que recibe un vector. 
Luego tenemos 2 for. Ambos for recorren los elementos,  pero el segundo for es el que toma un elemento y lo compara con el elemento que está delante de él (nunca habría un index fuera de rango porque eso está contemplado en el n-2) si el valor que toma es mayor que el valor que está delante de el (j+1) guarda el valor mayor en una variable aux. En la posición del elemento mayor va estar el elemento menor y en la posición del elemento  menor va a estar el elemento mayor el cual fue almacenado en la variable aux y haci sucesivamente va ha hacer con todos los elementos. Hasta que termine de recorrer el vector y eso lo determina el primer for.
Bien ahora ¿Como nos va ayudar este algoritmo para ordenar los objetos? Pues bien, en el if vamos a comparar un atributo numérico de nuestro objeto, si entra en el if vamos a mover el objeto a una variable aux e intercambiar las posiciones de los objetos. Con un ejemplo va a quedar más claro.


Ordenamiento de objetos 

Vamos a ordenar las alturas de los jugadores de un equipo de Básquet, del más alto al más bajo.


La clase Jugadores_Baquet recibe en su constructor los datos de los jugadores entre ellos la altura.
Luego definimos el método estático ordenamiento_burbuja el cual recibe la lista de jugadores a ordenar.
Luego aplicamos el algoritmo del método burbuja pero para que pueda hacer la comparación en el if necesitamos comparar valores numéricos, para ello accedemos a la altura de un jugador y la comparamos con la altura de el jugador que está una posición más adelante del jugador anterior.
NOTA: El comentario que esta en el método ordenamiento_burbuja  es equivalente a la instrucción 
lista_jugadores[altura],lista_jugadores[altura+1] = lista_jugadores[altura+1],lista_jugadores[altura] python tiene algo que se llama desempaquetado de tuplas (aunque tambien lo podes hacer con listas y arreglos) este desempaquetado básicamente nos permite declarar varias variables en una sola línea. 
Por último llamamos al método estático mostrar_jugadores que se encarga de iterar sobre la lista de jugadores pero del jugador  más al más bajo.Con la lista ordenada podemos iterar desde el final hacia el principio y esto lo hacemos con la clase reversed.
Fuera de la clase Jugadores_Baquet:

  1. Declaramos una lista con todos los jugadores del equipo.

  2. print es para separar la lista ordenada de la lista desordenada.

  3. Llamamos al método burbuja el cual va ordenar los objetos según su altura y después va a llamar al método mostrar_jugadores para recorrer la lista ordenada.
El resultado es:



Resumen

Como te comente al principio todos los lenguajes traen una clase llamada y/o método llamado sort el cual le pasas una lista,arreglo o tupla y te los ordena. Pero puede existir un caso como este donde necesites ordenar objetos en base a uno de sus atributos numéricos en esos casos el ordenamiento burbuja puede simplificarte el trabajo.


Comunidad Programadores e Informáticos Chile


¡Saludos!



Comentarios