Trier par sélection
- Fiche de cours
- Quiz et exercices
- Vidéos et podcasts
- Écrire un algorithme de tri par sélection d’un tableau de nombres.
- Prouver la terminaison et la correction du tri par sélection.
- Montrer que le cout du tri par sélection est quadratique.
- Coder en Python l’algorithme de tri par sélection d’un tableau de nombres.
- Le tri par sélection d’un tableau consiste rechercher le plus petit élément et à le placer en 0, le second plus petit élément et à le placer en 1, etc.
- Le cout d’un tri par sélection est toujours quadratique.
- Utiliser des boucles (for et while).
- Algorithmes de recherche : rechercher un extremum (terminaison, correction et cout).
Ainsi, à l’étape k, les k−1 premiers éléments du tableau sont triés et sont inférieurs aux autres éléments du tableau. On place ensuite le plus petit des éléments qui restent au rang k.
Voici les étapes du tri par sélection de Tab=[2, 3, 1, 6, 4, 5].
Étape | Tab | Commentaire |
1 | [1, 3, 2, 6, 4, 5] | Parmi [2, 3, 1, 6, 4, 5], 1 est le plus petit élément. On échange 1 et 2. |
2 | [1, 2, 3, 6, 4, 5] | Parmi [3, 2, 6, 4, 5], 2 est le plus petit élément. On échange 2 et 3. |
3 | [1, 2, 3, 6, 4, 5] | Parmi [3, 6, 4, 5], 3 est le plus petit élément. 3 est déjà à sa place. |
4 | [1, 2, 3, 4, 6, 5] | Parmi [6, 4, 5], 4 est le plus petit élément. On échange 4 et 6. |
5 | [1, 2, 3, 4, 5, 6] | Parmi [6, 5], 5 est le plus petit élément. On échange 5 et 6. |
6 | [1, 2, 3, 4, 5, 6] | 6 est à sa place. |
Voici ci-dessous un algorithme du tri par sélection d’un tableau de nombres Tab de taille n.
Pour i allant de 0 à n−2 | i = 0, puis i = 1, puis… i = n−2, |
i_mini ← i | on affecte à la variable i_mini l’indice i. C’est i_mini qui va contenir l’indice du plus petit élément après le parcours. |
Pour j allant de i+1 à n−1 | j = i+1, puis j = i+2, puis… j = n−1, |
Si Tab[j] < Tab[i_mini] | si Tab[j] est plus petit que Tab[i_mini], |
i_mini ← j | alors on affecte j à i_mini. |
FinSi | Fin de l’instruction conditionnelle. |
échanger Tab[i] et Tab[i_mini] | On échange Tab[i] et Tab[i_mini]. |
FinPour | Fin de la seconde boucle « Pour ». |
FinPour | Fin de la première boucle « Pour ». |
- Pour i = 0, i_mini = 0
j = 1
Tab[1] = 3 > Tab[0] = 2
j = 2
Tab[2] = 1 < Tab[0] = 2
i_mini = 2
On échange Tab[0] = 2 (Tab[i]) et Tab[2] = 1 (Tab[i_mini]), ce qui donne [1, 3, 2]. - Pour i = 1, i_mini = 1
j = 2
Tab[2] = 1 < Tab[1] = 3
i_mini = 2
On échange Tab[1] = 3 (Tab[i]) et Tab[2] = 2 (Tab[i_mini]), ce qui donne [1, 2, 3]. - L’algorithme est fini car la première boucle Pour est terminée pour i = 1.
En Python, la fonction tri_selection(Tab) implémente le tri par sélection de Tab.
def tri_selection(Tab): | On définit la fonction tri_selection. |
n = len(Tab) | La longueur de la table len(Tab) est affectée à la variable n. |
for i in range(0, n−1): | Pour i allant de 0 à n−2. |
i_mini = i | i est affecté à la variable i_mini. |
for j in range(i+1, n): | Pour j allant de i+1 à n−1 |
if Tab[j] < Tab[i_mini]: | Si Tab[j] est plus petit que Tab[i_mini] |
i_mini = j | alors j est affecté à la variable i_mini. |
temp = Tab[i] | Tab[i] est affecté à la variable temporaire temp. |
Tab[i] = Tab[i_mini] | Tab[i_mini] est affecté à Tab[i]. |
Tab[i_mini] = temp | temp est affecté à Tab[i_mini]. |
L’algorithme de la partie précédente contient deux boucles Pour imbriquées. L’algorithme de tri par sélection se termine donc car une boucle Pour se termine toujours.
Pour l’algorithme de tri par sélection de la partie précédente, un invariant de boucle (proposition qui doit être vraie à chaque itération de l’algorithme) peut être :
P(i) : « Après la i-ème itération de la boucle Pour, dans le tableau Tab, les éléments Tab[0], Tab[1], …, Tab[i−1] sont triés dans l’ordre croissant et les autres éléments sont plus grands. »
Démonstration de la correction
|
Le cout d’un algorithme de tri par sélection sera donc toujours le même pour un tableau de taille n.
L’algorithme de tri par sélection contient deux boucles imbriquées.
Ainsi pour un tableau de taille n,
- la boucle externe Pour exécute n−1 instructions car for i in range(0, n−1) (i allant de 0 à n−2) correspond à n−1 itérations.
- Pour chaque valeur de i de la boucle externe,
le nombre d’instructions
exécutées par la boucle interne
Pour est de
(n−1) − (i+1) + 1 = n − 1 − i − 1 + 1 = n − 1 − i
Finalement, il y aura (n−1) + (n−2) + … + 3 + 2 + 1 instructions.
On admet la relation suivante :
.
Comme le terme dominant du cout est n2, on dit que le cout est quadratique.
Le cout du tri par sélection est quadratique dans tous les cas.
Des quiz et exercices pour mieux assimiler sa leçon
La plateforme de soutien scolaire en ligne myMaxicours propose des quiz et exercices en accompagnement de chaque fiche de cours. Les exercices permettent de vérifier si la leçon est bien comprise ou s’il reste encore des notions à revoir.
Des exercices variés pour ne pas s’ennuyer
Les exercices se déclinent sous toutes leurs formes sur myMaxicours ! Selon la matière et la classe étudiées, retrouvez des dictées, des mots à relier ou encore des phrases à compléter, mais aussi des textes à trous et bien d’autres formats !
Dans les classes de primaire, l’accent est mis sur des exercices illustrés très ludiques pour motiver les plus jeunes.
Des quiz pour une évaluation en direct
Les quiz et exercices permettent d’avoir un retour immédiat sur la bonne compréhension du cours. Une fois toutes les réponses communiquées, le résultat s’affiche à l’écran et permet à l’élève de se situer immédiatement.
myMaxicours offre des solutions efficaces de révision grâce aux fiches de cours et aux exercices associés. L’élève se rassure pour le prochain examen en testant ses connaissances au préalable.
Des vidéos et des podcasts pour apprendre différemment
Certains élèves ont une mémoire visuelle quand d’autres ont plutôt une mémoire auditive. myMaxicours s’adapte à tous les enfants et adolescents pour leur proposer un apprentissage serein et efficace.
Découvrez de nombreuses vidéos et podcasts en complément des fiches de cours et des exercices pour une année scolaire au top !
Des podcasts pour les révisions
La plateforme de soutien scolaire en ligne myMaxicours propose des podcasts de révision pour toutes les classes à examen : troisième, première et terminale.
Les ados peuvent écouter les différents cours afin de mieux les mémoriser en préparation de leurs examens. Des fiches de cours de différentes matières sont disponibles en podcasts ainsi qu’une préparation au grand oral avec de nombreux conseils pratiques.
Des vidéos de cours pour comprendre en image
Des vidéos de cours illustrent les notions principales à retenir et complètent les fiches de cours. De quoi réviser sa prochaine évaluation ou son prochain examen en toute confiance !