Menu
Coddy logo textTech

Tri par sélection

Dernière mise à jour

Le tri par sélection divise le tableau en une région triée à gauche et une région non triée à droite. À chaque passe, il parcourt la région non triée pour trouver le plus petit élément, puis l'échange à la première position non triée, agrandissant la région triée d'une unité. Appuyez sur lecture ci-dessus pour observer le balayage et l'échange, ou avancez comparaison par comparaison.

Le tri par sélection effectue toujours le même nombre de comparaisons quel que soit l'entrée, mais réalise au plus n-1 échanges - bien moins que le tri à bulles - ce qui compte lorsque les écritures sont coûteuses.

Complexité temporelle et spatiale

CasComplexitéNotes
Meilleur casO(n²)Les comparaisons ont lieu même si le tableau est trié
Cas moyenO(n²)Ordre aléatoire
Pire casO(n²)Ordre inverse
EspaceO(1)En place
StableNonLes échanges peuvent réordonner les éléments égaux

Étape par étape

ÉtapeCe qui se passe
1Considérer tout le tableau comme non trié.
2Parcourir la région non triée pour trouver l'élément minimum.
3Échanger ce minimum à la première position non triée.
4Déplacer la frontière d'un cran vers la droite (cette position est désormais triée).
5Répéter jusqu'à ce qu'il ne reste qu'un seul élément non trié.

Exemple détaillé

Tri de [5, 2, 4, 1] :

PasseTableauAction
Début[5, 2, 4, 1]Tout le tableau est non trié.
1[1, 2, 4, 5]On parcourt [5, 2, 4, 1], le minimum est 1 à l'indice 3 ; on l'échange avec l'indice 0.
2[1, 2, 4, 5]On parcourt [2, 4, 5], le minimum est 2 déjà à l'indice 1 ; il s'échange avec lui-même.
3[1, 2, 4, 5]On parcourt [4, 5], le minimum est 4 déjà à l'indice 2 ; aucun déplacement nécessaire.
Fin[1, 2, 4, 5]Il ne reste que 5, il est donc déjà à sa place.

Quand utiliser le tri par sélection

À utiliser quandÀ éviter quand
Les écritures sont coûteuses - il effectue au plus n-1 échanges.Le tableau est grand - les O(n²) comparaisons dominent.
Vous avez besoin d'un tri en place simple et facile à implémenter.Vous avez besoin d'un tri stable qui préserve l'ordre des clés égales.
La mémoire est limitée - il n'utilise que O(1) d'espace supplémentaire.Les données sont presque triées - il ne peut pas terminer plus tôt comme le tri par insertion.
Le jeu de données est minuscule et une performance prévisible compte.Le débit compte - les tris O(n log n) comme le tri rapide sont bien plus rapides.

Code de Selection Sort

Une implémentation propre et exécutable de Selection Sort en Python, JavaScript, Java, C++, C. Choisissez un langage, copiez le code ou ouvrez-le préchargé dans le Playground Coddy.

Code de Selection Sort en Python

Python
1def selection_sort(a):2    n = len(a)3    for i in range(n - 1):4        # Find the smallest element in the unsorted tail5        min_idx = i6        for j in range(i + 1, n):7            if a[j] < a[min_idx]:8                min_idx = j9        a[i], a[min_idx] = a[min_idx], a[i]10    return a11
12
13nums = [64, 25, 12, 22, 11]14print("Before:", nums)15selection_sort(nums)16print("After: ", nums)
Exécutez ce code dans le Playground Python

FAQ sur le tri par sélection

Quelle est la complexité temporelle du tri par sélection ?
Le tri par sélection est en O(n²) dans tous les cas - meilleur, moyen et pire - car il parcourt toujours toute la région non triée pour trouver chaque minimum. Il utilise O(1) d'espace supplémentaire.
Le tri par sélection est-il stable ?
La version standard en place n'est pas stable, car échanger un minimum éloigné à sa position peut faire passer un élément égal devant un autre. Une variante stable existe, mais elle nécessite de décaler plutôt que d'échanger.
Quand le tri par sélection est-il utile ?
Il est utile lorsque le coût d'écriture en mémoire est élevé, car il réalise au plus n-1 échanges - le minimum possible pour un tri par comparaison qui déplace des éléments.
Quelle est la différence entre le tri par sélection et le tri à bulles ?
Les deux sont des tris par comparaison en O(n²), mais le tri par sélection effectue au plus n-1 échanges tandis que le tri à bulles peut en faire jusqu'à O(n²). Le tri à bulles peut aussi détecter un tableau déjà trié et s'arrêter plus tôt, alors que le tri par sélection exécute toujours toutes les passes.
Dois-je utiliser le tri par sélection ou le tri par insertion ?
Dans la plupart des cas, préférez le tri par insertion - il est stable, s'exécute en O(n) sur des données presque triées et est plus rapide en moyenne. Choisissez le tri par sélection uniquement lorsque minimiser le nombre d'écritures est la priorité, car il garantit au plus n-1 échanges.
Pourquoi le tri par sélection s'exécute-t-il toujours en O(n²), même sur un tableau trié ?
Le tri par sélection n'a aucun moyen de savoir qu'un élément est déjà le minimum sans parcourir le reste de la région non triée, il effectue donc toutes les comparaisons à chaque passe quel que soit l'ordre d'entrée. C'est pourquoi le meilleur cas égale le pire en O(n²) - contrairement au tri par insertion ou à bulles, qui peuvent s'arrêter court.
Coddy programming languages illustration

Maîtrisez les algorithmes avec Coddy

COMMENCER