# ======================================= #
# TRI A BULLE                             #
# Programme de base avec temps de calcul. #
# Version du 21/11/2015                   #
# ======================================= #

# Importations
from random import randint
from time import perf_counter

# La fonction de tri
def tri_bulle(L):
    k = len(L)
    # Liste vide ou ne contenant qu'un élément
    if k<= 1:
        return L
    else:
        Done = False
        while not Done and k >= 2:
            Done = True
            for i in range(k-1):
                if L[i] > L[i+1]:
                    L[i], L[i+1] = L[i+1], L[i]
                    Done = False
            k -= 1
    # Aucun return requis, c'est la liste LNA qui est modifiée...

# Génération d'une liste de nombres entiers aléatoires.
n = int(input('Longueur de la liste à trier ? '))
valmax = int(input('\nValeur maxi des nombres générés ? '))
LNA = [randint(0,valmax) for i in range(n)]
L_init = list(LNA)

# Tri de la liste LNA des nombres aléatoires + mesure de la durée du tri
t_start = perf_counter()
tri_bulle(LNA)
t_end = perf_counter()
t_ellapse = t_end - t_start

# Affichage des listes (initiale et triée) ... si elles ne sont pas trop grandes ! :)
if n <= 50:
    print('\nListe initiale :')
    print(L_init)
    print('\nListe triée :')
    print(LNA)

# Affichage de la durée du tri
print('\nDurée du tri : ' + str(t_ellapse))

# ================
# FIN DU PROGRAMME
