3.2 Ordenamiento de listas

Si tenemos una lista con una serie de datos cargados, es posible que querramos tener esos datos ordenados (de menor a mayor, o de mayor a menor).
Para ordenar una lista de menor a mayor se quieren poner los elementos mayores en el final de dicha lista, y los elementos menores al principio. Para ello, contamos con la instrucción if.
Lo que haremos es comparar el primer elemento de la lista con todos los que lo siguen. Si el primer elemento es menor a todos los demás, ya está en su posición correcta. Si alguno de los que lo siguen es menor, intercambiamos sus posiciones.

 Comparamos el primer elemento (15) con el segundo (7). Como 15 es mayor, los intercambio. Ahora comparo el primero (7) con el tercero (12). Como no es mayor, no los intercambio. Comparo el primer elemento (79 con el cuarto (9) y tampoco los intercambio. Finalmente, comparo el primero (7) con el quinto (3). Como el primero es mayor, los intercambio. Luego de comparar el primer elemento con todos los que le siguen, podemos asegurar que el primer elemento de la lista es el menor de todos.

Ahora repetimos el procedimiento comparando el segundo elemento con todos los que le siguen.



Comparo el segundo elemento (15) con el tercero (12). Como es mayor, los intercambio. Luego comparo el segundo (12) con el cuarto (9) y como es mayor, también los intercambio. Por último, comparo el segundo (9) con el quinto (7) y también los intercambio. Ahora puedo asegurar que el primer y el segundo elemento están ordenados.

En la siguiente vuelta, comparamos el tercer elemento de la lista con todos los que siguen:

Comparo el tercero (15) con el cuarto (12) y los intercambio. Luego comparo el tercero (12) con el quinto (9) y los intercambio. Ahora puedo asegurar que los tres primeros elementos de la lista están ordenados.

Ahora comparo el cuarto elemento con todos los que siguen:

Comparo 15 con 12 y los intercambio. Puedo asegurar que el cuarto también está ordenado. Como todos los elementos menos el último están ordenados; el último elemento es el mayor de todos y tambien está ordenado, no tengo que continuar.

Vamos a ver ahora el programa que implementa este algoritmo:


 import random

def ordenarLista():
    n=5
    lista = []
    for i in range(0,n):
        lista.append(random.randint(0, 100))
    print( "Lista inicial:",lista)


## Ordenamiento


    for i in range(0,n-1): 
        for j in range(i+1,n):
            if lista[i]>lista[j]:
                aux = lista[i]
                lista[i]=lista[j]
                lista[j]=aux
    print("Lista ordenada:",lista)

ordenarLista()

   

Si en lugar de ascendente, quiero hacer un ordenamiento descendente, sólo tengo que cambiar el signo > por < en la comparación.
Este método de ordenamiento se llama ordenamiento por burbujeo, ya que (con mucha imaginación), los elementos más "livianos" suben rápidamente como burbujas en el agua, mientras que los más pesados se van hundiendo lentamente.

Este algoritmo puede aplicarse en cualquier lenguaje de programación, con ajustes mínimos. Sin embargo, el Python tiene la función sort() que ordena toda la lista en una sola línea de código.

import random

def ordenarLista():
    n=5
    lista = []
    for i in range(0,n):
        lista.append(random.randint(0, 100))
    print( "Lista inicial:",lista)
## Ordenamiento
   
    lista.sort()
    print("Lista ordenada:",lista)

ordenarLista()


Este programa hace lo mismo que el anterior, mucho más rápidamente.

No hay comentarios:

Publicar un comentario