Algorithme de tri par sélection avec Python Code Exemple
⚡ Résumé intelligent
Le tri par sélection est un algorithme de comparaison sur place qui trie une liste aléatoire par ordre croissant en sélectionnant successivement la plus petite valeur non triée et en la déplaçant dans la section triée. Cette ressource explique… Python exemple et sa complexité temporelle.
Qu’est-ce que le tri par sélection ?
TRI DE SÉLECTION est un algorithme de tri par comparaison utilisé pour trier une liste aléatoire d'éléments par ordre croissant. La comparaison ne nécessite pas beaucoup d’espace supplémentaire. Cela ne nécessite qu'un seul espace mémoire supplémentaire pour la variable temporelle.
Ceci est connu comme en place tri. Le tri par sélection a une complexité temporelle de O(n2) où n est le nombre total d'éléments dans la liste. La complexité temporelle mesure le nombre d'itérations nécessaires pour trier la liste. La liste est divisée en deux partitions : la première liste contient les éléments triés, tandis que la seconde liste contient les éléments non triés.
Par défaut, la liste triée est vide et la liste non triée contient tous les éléments. La liste non triée est ensuite analysée pour rechercher la valeur minimale, qui est ensuite placée dans la liste triée. Ce processus est répété jusqu'à ce que toutes les valeurs aient été comparées et triées.
Comment fonctionne le tri par sélection ?
Le premier élément de la partition non triée est comparé à toutes les valeurs du côté droit pour vérifier s'il s'agit de la valeur minimale. Si ce n'est pas la valeur minimale, alors sa position est échangée avec la valeur minimale.
Exemple
- Par exemple, si l'index de la valeur minimale est 3, alors la valeur de l'élément d'index 3 est placée à l'index 0 tandis que la valeur qui était à l'index 0 est placée à l'index 3. Si le premier élément de la partition non triée est la valeur minimale, puis il renvoie ses positions.
- L'élément qui a été déterminé comme valeur minimale est ensuite déplacé vers la partition de gauche, qui est la liste triée.
- Le côté partitionné a maintenant un élément, tandis que le côté non partitionné a (n – 1) éléments où n est le nombre total d'éléments dans la liste. Ce processus est répété encore et encore jusqu'à ce que tous les éléments aient été comparés et triés en fonction de leurs valeurs.
Définition du problème
Une liste d’éléments classés aléatoirement doit être triée par ordre croissant. Considérez la liste suivante comme exemple.
[21,6,9,33,3]
La liste ci-dessus doit être triée pour produire les résultats suivants
[3,6,9,21,33]
Solution (algorithme)
Étape 1) Obtenez la valeur de n qui est la taille totale du tableau
Étape 2) Partitionnez la liste en sections triées et non triées. La section triée est initialement vide tandis que la section non triée contient la liste entière
Étape 3) Choisissez la valeur minimale de la section non partitionnée et placez-la dans la section triée.
Étape 4) Répétez le processus (n – 1) fois jusqu'à ce que tous les éléments de la liste aient été triés.
Représentation visuelle
Étant donné une liste de cinq éléments, les images suivantes illustrent comment l'algorithme de tri par sélection parcourt les valeurs lors de leur tri.
L'image suivante montre la liste non triée
Étape 1)
La première valeur 21 est comparée au reste des valeurs pour vérifier s'il s'agit de la valeur minimale.
3 est la valeur minimale, donc les positions 21 et 3 sont inversées. Les valeurs sur fond vert représentent la partition triée de la liste.
Étape 2)
La valeur 6 qui est le premier élément de la partition non triée est comparée au reste des valeurs pour savoir s'il existe une valeur inférieure.
La valeur 6 est la valeur minimale, elle conserve donc sa position.
Étape 3)
Le premier élément de la liste non triée avec la valeur 9 est comparé au reste des valeurs pour vérifier s'il s'agit de la valeur minimale.
La valeur 9 est la valeur minimale, elle conserve donc sa position dans la partition triée.
Étape 4)
La valeur 33 est comparée au reste des valeurs.
La valeur 21 est inférieure à 33, donc les positions sont inversées pour produire la nouvelle liste ci-dessus.
Étape 5)
Il ne nous reste qu'une seule valeur dans la liste non partitionnée. C’est donc déjà trié.
La liste finale est comme celle présentée dans l'image ci-dessus.
Programme de tri par sélection utilisant Python 3
Le code suivant montre l'implémentation du tri de sélection à l'aide de Python 3
def selectionSort( itemsList ): n = len( itemsList ) for i in range( n - 1 ): minValueIndex = i for j in range( i + 1, n ): if itemsList[j] < itemsList[minValueIndex] : minValueIndex = j if minValueIndex != i : temp = itemsList[i] itemsList[i] = itemsList[minValueIndex] itemsList[minValueIndex] = temp return itemsList el = [21,6,9,33,3] print(selectionSort(el))
Exécutez le code ci-dessus produit les résultats suivants
[3, 6, 9, 21, 33]
Code Explication
L'explication du code est la suivante
Voici Code explication:
- Définit une fonction nommée selectionSort
- Obtient le nombre total d'éléments dans la liste. Nous en avons besoin pour déterminer le nombre de passes à effectuer lors de la comparaison des valeurs.
- Boucle extérieure. Utilise la boucle pour parcourir les valeurs de la liste. Le nombre d'itérations est (n – 1). La valeur de n est 5, donc (5 – 1) nous donne 4. Cela signifie que les itérations externes seront effectuées 4 fois. A chaque itération, la valeur de la variable i est affectée à la variable minValueIndex
- Boucle intérieure. Utilise la boucle pour comparer la valeur la plus à gauche aux autres valeurs du côté droit. Cependant, la valeur de j ne commence pas à l'index 0. Elle commence à (i + 1). Cela exclut les valeurs déjà triées afin que nous nous concentrions sur les éléments qui n'ont pas encore été triés.
- Trouve la valeur minimale dans la liste non triée et la place à sa bonne position
- Met à jour la valeur de minValueIndex lors de l'échangeping La condition est vraie
- Compare les valeurs des numéros d'index minValueIndex et i pour voir si elles ne sont pas égales
- La valeur la plus à gauche est stockée dans une variable temporelle
- La valeur inférieure du côté droit prend la première position
- La valeur qui était stockée dans la valeur temporelle est stockée dans la position qui était précédemment occupée par la valeur minimale
- Renvoie la liste triée comme résultat de la fonction
- Crée une liste el contenant des nombres aléatoires
- Imprimez la liste triée après avoir appelé la fonction de tri de sélection en passant el comme paramètre.
Complexité temporelle du tri par sélection
La complexité du tri est utilisée pour exprimer le nombre de temps d'exécution nécessaires pour trier la liste. L'implémentation comporte deux boucles.
La boucle externe qui sélectionne les valeurs une par une dans la liste est exécutée n fois où n est le nombre total de valeurs dans la liste.
La boucle interne, qui compare la valeur de la boucle externe avec le reste des valeurs, est également exécutée n fois, n étant le nombre total d'éléments de la liste.
Par conséquent, le nombre d'exécutions est (n * n), qui peut également être exprimé par O(n2).
Le tri de sélection comporte trois catégories de complexité, à savoir :
- Pire cas – c’est ici que la liste fournie est par ordre décroissant. L'algorithme effectue le nombre maximum d'exécutions qui est exprimé par [Big-O] O(n2)
- Meilleur cas – cela se produit lorsque la liste fournie est déjà triée. L'algorithme effectue le nombre minimal d'exécutions, exprimé par Ω(n).2)
- Cas moyen – cela se produit lorsque la liste est dans un ordre aléatoire. La complexité moyenne est exprimée par Θ(n) = Θ<sub>big-theta</sub>2)
Le tri par sélection a une complexité spatiale de O(1) car il nécessite une variable temporelle utilisée pour l'échange.ping valeurs.
Quand utiliser le tri par sélection ?
Le tri par sélection est mieux utilisé lorsque vous souhaitez :
- Vous devez trier une petite liste d'éléments par ordre croissant
- Lorsque le coût de l'échangeping les valeurs sont insignifiantes
- Il est également utilisé lorsque vous devez vous assurer que toutes les valeurs de la liste ont été vérifiées.
Avantages du tri par sélection
Voici les avantages du tri par sélection
- Il fonctionne très bien sur les petites listes
- Il s'agit d'un algorithme sur place. Cela ne nécessite pas beaucoup d’espace pour le tri. Un seul espace supplémentaire est requis pour contenir la variable temporelle.
- Il fonctionne bien sur les articles déjà triés.
Inconvénients du tri par sélection
Voici les inconvénients du tri par sélection.
- Il fonctionne mal lorsque vous travaillez sur des listes volumineuses.
- Le nombre d'itérations effectuées lors du tri est n au carré, où n est le nombre total d'éléments dans la liste.
- D'autres algorithmes, tels que le tri rapide, ont de meilleures performances que le tri par sélection.













