Le tri par insertion est l’un des algorithmes de tri les plus simples et les plus intuitifs en informatique. Il appartient à la catégorie des tris par comparaison, ce qui signifie qu’il compare les éléments du tableau pour les trier. Dans ce guide complet, nous explorerons en détail le tri par insertion en Python, en couvrant sa logique, sa mise en œuvre, ses avantages, ses inconvénients et des exemples pratiques.
Le tri par insertion est un algorithme de tri simple mais efficace qui fonctionne en construisant progressivement une séquence triée. Il est souvent comparé à la manière dont on trie les cartes à jouer à la main, en insérant chaque carte à sa place appropriée dans la main triée.
Le tri par insertion fonctionne en parcourant le tableau à trier de gauche à droite. À chaque étape, il prend un élément non trié et le compare à tous les éléments déjà triés. L’élément est inséré à sa place correcte dans la séquence triée. Ce processus se répète jusqu’à ce que tous les éléments soient triés.
L’algorithme du tri par insertion peut être décrit en pseudo-code comme suit :
Voici une implémentation en Python de l’algorithme du tri par insertion :
def tri_insertion(liste):
for i in range(1, len(liste)):
cle = liste[i]
j = i - 1
while j >= 0 and cle < liste[j]:
liste[j + 1] = liste[j]
j -= 1
liste[j + 1] = cle
Cette fonction tri_insertion
prend une liste en entrée et la trie en utilisant le tri par insertion.
Le tri par insertion est simple mais moins efficace que certains autres algorithmes de tri. Voici une comparaison rapide avec d’autres algorithmes populaires :
ma_liste = [12, 11, 13, 5, 6]
tri_insertion(ma_liste)
print("Liste triée :", ma_liste)
Supposons que nous ayons une classe Personne
avec des attributs nom
et age
, et que nous voulions trier une liste de personnes par âge.
class Personne:
def __init__(self, nom, age):
self.nom = nom
self.age = age
personnes = [Personne("Alice", 25), Personne("Bob", 20), Personne("Charlie", 30)]
tri_insertion
(personnes, key=lambda personne: personne.age)
for personne in personnes:
print(f"{personne.nom} ({personne.age} ans)")
ma_liste = [12, 11, 13, 5, 6]
tri_insertion(ma_liste, reverse=True)
print("Liste triée en ordre descendant :", ma_liste)
def tri_insertion_recursif(liste, n):
if n <= 1:
return
tri_insertion_recursif(liste, n-1)
cle = liste[n-1]
j = n - 2
while j >= 0 and cle < liste[j]:
liste[j + 1] = liste[j]
j -= 1
liste[j + 1] = cle
ma_liste = [12, 11, 13, 5, 6]
tri_insertion_recursif(ma_liste, len(ma_liste))
print("Liste triée (version récursive) :", ma_liste)
Le tri par insertion a une complexité spatiale de O(1), ce qui signifie qu’il n’utilise qu’une quantité constante de mémoire supplémentaire en plus de la mémoire requise pour stocker la liste d’origine.
L’algorithme de tri par insertion en Python trie simplement mais efficacement des listes de petite taille ou partiellement triées. Les programmeurs apprécient sa simplicité et sa facilité de mise en œuvre, bien qu’il convienne mieux aux cas d’utilisation où les performances sont moins critiques. Pour trier de grandes listes, il est plus approprié d’utiliser d’autres algorithmes de tri tels que le tri rapide ou le tri fusion. Toutefois, le tri par insertion offre un excellent point de départ pour comprendre les algorithmes de tri et leurs implications. Choisir l’algorithme de tri adapté à un problème spécifique dépend de la taille des données et des contraintes de performance.
Lire aussi : Tris par Insertion en Python : Exercices Corrigés
Dans cette annexe, nous allons explorer davantage le tri par insertion en fournissant des cas pratiques, des astuces, des recommandations et des applications courantes. Cela vous aidera à mieux comprendre comment utiliser cet algorithme et dans quelles situations il est le plus approprié.
Le tri par insertion est largement utilisé dans les jeux de cartes pour trier les mains des joueurs. À chaque nouvelle carte ajoutée à la main, le joueur peut utiliser le tri par insertion pour maintenir la main triée en tout temps. Cela facilite la recherche de cartes et permet de vérifier rapidement si une main contient une combinaison gagnante.
Le tri par insertion est efficace pour trier de petites listes, notamment lorsque le nombre d’éléments est inférieur à quelques centaines. Par exemple, lors de la saisie de quelques noms dans un carnet d’adresses, le tri par insertion peut être utilisé pour maintenir la liste triée à mesure que de nouveaux noms sont ajoutés.
Le tri par insertion brille lorsque la liste est déjà partiellement triée. Dans de tels cas, il effectue moins de comparaisons et de déplacements que dans le pire des cas, ce qui en fait un choix judicieux.
Le tri par insertion devient inefficace pour trier de grandes listes en raison de sa complexité quadratique. Si vous devez trier une grande quantité de données, envisagez d’autres algorithmes de tri plus efficaces, tels que le tri rapide ou le tri fusion.
Avant de choisir un algorithme de tri, effectuez des tests de performance sur vos données spécifiques. Comparez le tri par insertion avec d’autres algorithmes pour déterminer lequel convient le mieux à votre cas d’utilisation.
Si vous devez trier des objets personnalisés, utilisez des fonctions de comparaison personnalisées pour spécifier comment les objets doivent être comparés. Cela permet une flexibilité maximale dans le tri.
Le tri par insertion est souvent utilisé dans les systèmes de gestion de bases de données pour trier les résultats des requêtes. Les données sont triées progressivement à mesure qu’elles sont récupérées, ce qui permet d’économiser de la mémoire.
Dans les applications web, le tri par insertion peut être utilisé pour trier de petites listes d’articles, de commentaires ou de produits. Il est rapide à mettre en œuvre et fonctionne bien pour des quantités limitées de données.
En conclusion, le tri par insertion en Python est un algorithme de tri simple mais utile pour diverses applications. Il est particulièrement adapté aux petites listes ou aux données partiellement triées. Cependant, pour des listes de grande taille, d’autres algorithmes de tri plus efficaces sont recommandés. En utilisant les astuces et les recommandations de cet annexe, vous pouvez maximiser l’efficacité de votre tri par insertion et choisir judicieusement l’algorithme de tri en fonction de vos besoins spécifiques.
Bien sûr, voici quelques extraits de code pour illustrer certains des cas pratiques et astuces mentionnés dans l’annexe précédente :
def tri_cartes_a_jouer(main):
for i in range(1, len(main)):
carte = main[i]
j = i - 1
while j >= 0 and carte < main[j]:
main[j + 1] = main[j]
j -= 1
main[j + 1] = carte
# Exemple d'utilisation :
main_de_cartes = [2, 4, 7, 1, 9]
tri_cartes_a_jouer(main_de_cartes)
print("Main triée :", main_de_cartes)
def tri_par_insertion(liste):
for i in range(1, len(liste)):
cle = liste[i]
j = i - 1
while j >= 0 and cle < liste[j]:
liste[j + 1] = liste[j]
j -= 1
liste[j + 1] = cle
# Exemple d'utilisation pour trier une petite liste de noms :
noms = ["Alice", "Charlie", "Bob", "David", "Eve"]
tri_par_insertion(noms)
print("Noms triés :", noms)
class Personne:
def __init__(self, nom, age):
self.nom = nom
self.age = age
# Fonction de comparaison personnalisée par âge
def comparer_age(personne):
return personne.age
def tri_personnes_par_age(personnes):
for i in range(1, len(personnes)):
cle = personnes[i]
j = i - 1
while j >= 0 and comparer_age(cle) < comparer_age(personnes[j]):
personnes[j + 1] = personnes[j]
j -= 1
personnes[j + 1] = cle
# Exemple d'utilisation :
personnes = [Personne("Alice", 25), Personne("Bob", 20), Personne("Charlie", 30)]
tri_personnes_par_age(personnes)
for personne in personnes:
print(f"{personne.nom} ({personne.age} ans)")
Ces extraits de code illustrent comment vous pouvez appliquer le tri par insertion à des cas pratiques spécifiques et utiliser des fonctions de comparaison personnalisées pour trier des objets personnalisés selon vos besoins.
Cet article vous aidera à mieux rédiger un projet de reprise d'entreprise. Ci-après les étapes…
Exprimer un jugement sur une autre personne est une démarche délicate qui nécessite tact, respect…
Exercice 1 : Détection du Stock Dormant Une entreprise a les données suivantes pour un…
Le stock en transit, aussi appelé stock en cours de transport, désigne les biens ou…
Le stock dormant (aussi appelé stock obsolète ou inutilisé) désigne les articles ou les biens…
La fiche hebdomadaire de travail est un outil simple mais puissant pour organiser ses tâches,…
This website uses cookies.