<-- Back to list of examples

"""
Sample Python/Pygame Programs
Simpson College Computer Science
http://programarcadegames.com/
http://simpson.edu/computer-science/
"""
import random

# Ordenación
def ordenamiento_porseleccion(list):

    # Iteramos por todo el array
    for pos_actual in range( len(list)):
	    # Encontramos la posición con el número más pequeño
	    # Empezamos con la posición actual
        min_pos = pos_actual
        
        # Escaneamos de izquierda a derecha (final de la lista)
        for escan_pos in range(pos_actual+1, len(list)):
        
            # ¿Esta es la posición más pequeña?
            if list[escan_pos] < list[min_pos]:
            
                # Si lo es, la marcamos como tal.
                min_pos = escan_pos
        
        # Intercambiamos los dos valores
        temp = list[min_pos]
        list[min_pos] = list[pos_actual]
        list[pos_actual] = temp

def ordenamiento_porinsercion(list):
    """Ordenamos una lista usando el algoritmo por inserción"""

    # Empezamos por el segundo elemento (pos 1).
    # Usamos este elemento para introducirlo en la lista.
    for pos_clave in range(1, len(list)):
    
        # Obtenemos el valor del elemento a introducir
        valor_clave = list[pos_clave]
        
        # Escaneamos de derecha a izquierda (principio de la lista)
        escan_pos = pos_clave - 1
        
        # Iteramos sobre cada elemento, desplazándolo hacia arriba hasta
        # que alcanzamos la posición
        while (escan_pos >= 0) and (list[escan_pos] > valor_clave):
            list[escan_pos + 1] = list[escan_pos]
            escan_pos = escan_pos - 1
            
        # Ahora que todo ha sido apartado a un lado, introducimos el valor
        # clave en la ubicación correcta
        list[escan_pos + 1] = valor_clave

        
# Imprimimos una lista
def print_lista(list):
    for item in list:
        print("%3d" % item,end="")
    print()
    
# Creamos dos listas con los mismos números aleatorios
lista1 = []
lista2 = []
longitud_lista = 10
for i in range(longitud_lista):
    nuevo_numero = random.randrange(100)
    lista1.append(nuevo_numero)
    lista2.append(nuevo_numero)

# Imprimimos la lista original
print_lista(lista1)

# Usamos ordenar por selección e imprimimos el resultado
print("Ordenar por Selección")
ordenamiento_porseleccion(lista1)        
print_lista(lista1)

#  Usamos ordenar por inserción e imprimimos el resultado.
print("Ordenar por Inserción")
ordenamiento_porinsercion(lista2)        
print_lista(lista2)