Otro método que nos suena porque lo solemos utilizar a la hora de ordenar cosas es el método de la
Inserción directa.
Lo bueno que tiene es que la lista puede ir creciendo a medida que ordenamos elementos. Por eso, aunque es un algoritmo lento, puede venir bien para implementarlo poco a poco (ciclo a ciclo) en un microcontrolador lento aunque la lista de elementos a ordenar vaya creciendo y la de elementos ordenados decreciendo a medida que ordenamos. En un número de ciclos igual al número de elementos, estarán todos ordenados.
Viene bien para que un PLC pueda ordenar listas grandes sin que pierda mucho tiempo en cada ciclo.
Primero consideramos que el primer elemento de la lista ya está ordenado. Después tomamos el siguiente elemento y lo insertamos en la posición que debería tener dentro de la lista de elementos ya ordenados. Seguimos así hasta que hemos tomado el último elemento y lo hemos insertado en su lugar.
import random
vector = list(range(1,21))
random.shuffle(vector)
for position in range(1, len(vector)):
for i in range(position):
if vector[i] > vector[position]:
temp = vector[position]
for j in range(position, i, -1):
vector[j] = vector[j-1]
vector[i] = temp
print(vector)
El algoritmo se puede mejorar más todavía si tenemos en cuenta que la lista está ordenada y buscamos el sitio del nuevo elemento mediante una búsqueda binaria. Primero buscamos en el medio de la lista, luego en la mitad de la primera mitad o en la mitad de la segunda mitad, así hasta que encontramos el sitio del nuevo elemento. Es algo más rápido pero no quiero complicar más el algoritmo.