Files
1ereNSI/algorithmes/mini-projets/08_course_algos/starter.py

93 lines
3.1 KiB
Python
Raw Normal View History

# Projet 08 — La Course des Algorithmes
# Comparer les performances du tri par insertion et du tri par sélection
import random
import time
# -------------------------------------------------------
# Étape 1 : recopie ici tes deux fonctions de tri
# -------------------------------------------------------
def tri_insertion(tab):
# TODO : recopier depuis le cours
pass
def tri_selection(tab):
# TODO : recopier depuis le cours
pass
# -------------------------------------------------------
# Outils de mesure (déjà fournis)
# -------------------------------------------------------
def mesurer_temps(fonction, tab):
"""
Mesure le temps d'exécution de fonction(tab) en millisecondes.
Travaille sur une copie pour ne pas modifier l'original.
"""
copie = tab[:]
debut = time.time()
fonction(copie)
fin = time.time()
return round((fin - debut) * 1000, 3) # résultat en ms
def generer_liste(n, mode="aleatoire"):
"""
Génère une liste de n entiers selon le mode :
- "aleatoire" : ordre aléatoire
- "trie" : déjà triée (croissant)
- "inverse" : triée à l'envers (décroissant)
"""
if mode == "aleatoire":
return random.sample(range(n * 10), n)
elif mode == "trie":
return list(range(n))
elif mode == "inverse":
return list(range(n, 0, -1))
# -------------------------------------------------------
# Étape 3 : tableau comparatif selon la taille
# -------------------------------------------------------
def comparer_tailles():
tailles = [100, 500, 1000, 2000, 5000]
print("=== Comparaison par taille (liste aléatoire) ===\n")
print(f" {'n':>6} {'Insertion (ms)':>16} {'Sélection (ms)':>16} {'Vainqueur':>10}")
print(" " + "-" * 55)
for n in tailles:
liste = generer_liste(n, "aleatoire")
t_insertion = mesurer_temps(tri_insertion, liste)
t_selection = mesurer_temps(tri_selection, liste)
vainqueur = "Insertion" if t_insertion < t_selection else "Sélection"
print(f" {n:>6} {t_insertion:>16.3f} {t_selection:>16.3f} {vainqueur:>10}")
print()
# -------------------------------------------------------
# Étape 4 : tableau comparatif selon le mode (n fixé)
# -------------------------------------------------------
def comparer_modes(n=1000):
modes = ["aleatoire", "trie", "inverse"]
print(f"=== Comparaison par configuration (n = {n}) ===\n")
print(f" {'Mode':<12} {'Insertion (ms)':>16} {'Sélection (ms)':>16} {'Vainqueur':>10}")
print(" " + "-" * 60)
for mode in modes:
liste = generer_liste(n, mode)
t_insertion = mesurer_temps(tri_insertion, liste)
t_selection = mesurer_temps(tri_selection, liste)
vainqueur = "Insertion" if t_insertion < t_selection else "Sélection"
print(f" {mode:<12} {t_insertion:>16.3f} {t_selection:>16.3f} {vainqueur:>10}")
print()
# -------------------------------------------------------
# Programme principal
# -------------------------------------------------------
comparer_tailles()
comparer_modes(n=1000)
print("Conclusion :")
print(" TODO : écris tes observations ici")