Professional Documents
Culture Documents
Problmatique : tant donn une structure linaire (tableau, liste, etc) contenant des valeurs d'un type ordonn, il faut trier les lments en ordre croissant (ou dcroissant). Il existe des dizaines d'algorithmes rpondant ce problme, utilisant quelques principes de base auxquels on ajoute des variantes On peut distinguer :
les tris internes qui trient les lments dans la structure qui les contient (tableau, liste, ...) ou au pire utilise une structure annexe de mme type les tris externes utiliss lorsque la quantit d'lments trier est telle qu'ils ne tiennent pas en mmoire vive et qu'il faut stocker des lments dans des fichiers ou des tables de bases de donnes
17 | 701 | 2 | 268 | 415 | 45 | 45 | 102 17 | 2 | 701 | 268 | 415 | 45 | 45 | 102 17 | 2 | 268 | 701 | 415 | 45 | 45 | 102 17 | 2 | 268 | 415 | 701 | 45 | 45 | 102 17 | 2 | 268 | 415 | 45 | 701 | 45 | 102 17 | 2 | 268 | 415 | 45 | 45 | 701 | 102 17 | 2 | 268 | 415 | 45 | 45 | 102 | 701
Le tri bulle est en place et l'algorithme donn ici est stable (il serait instable si on utilisait au lieu de >) Une amlioration possible du tri bulle consiste utiliser une variable boolenne drapeau qui permet de stopper le tri si plus aucune permutation n'a lieu
5 6
noitammargorP te euqimhtiroglA - 2 ertsemeS - euqitamrofnI ecneciL noitammargorP te euqimhtiroglA - 2 ertsemeS - euqitamrofnI ecneciL
Remarques : la complexit au pire et en moyenne reste en O(n2) mais est linaire au mieux cette amlioration n'est efficace que si le tableau est dj un peu tri et qu'il devient tri assez vite
7
Une autre amlioration possible du tri bulle est le tri Boustrophedon (du nom des critures qui changent de sens chaque ligne) :
on parcourt le tableau de gauche droite, en faisant remonter l'lment le plus grand on redescend le tableau de droite gauche, en faisant descendre le plus petit on recommence en ignorant les 2 lments dj tris la complexit au pire et en moyenne est toujours en O(n2) mais est rduite du fait qu'on peut exploiter les bonnes positions des petits lments comme des plus grands
01
noitammargorP te euqimhtiroglA - 2 ertsemeS - euqitamrofnI ecneciL noitammargorP te euqimhtiroglA - 2 ertsemeS - euqitamrofnI ecneciL
Le tri slection peut tre amlior en positionnant chaque parcours du tableau le plus grand et le plus petit lment, selon le mme principe que celui utilis pour le tri Boustrophdon.
dans ce cas, on fera 2 fois moins de tours de boucle tantque (on trie 2 lments chaque tour) mais chaque tour, on effectuera plus d'oprations, la complexit reste donc quadratique mais s'amliore
11
21
Le tri slection est en place et l'algorithme donn ici est stable (il serait instable si on utilisait au lieu de >)
Le tri par insertion est en place et l'algorithme donn ici est stable (il serait instable si on utilisait au lieu de >)
Remarque : le tri insertion est donc environ 2 fois plus rapide que le tri slection
31
41
Tris quadratiques
Comparaison des tris quadratiques sur des tableaux d'entiers gnrs alatoirement
51 61
noitammargorP te euqimhtiroglA - 2 ertsemeS - euqitamrofnI ecneciL noitammargorP te euqimhtiroglA - 2 ertsemeS - euqitamrofnI ecneciL
i=5 et pivot=2
Le tri rapide n'est pas optimum dans tous les cas, mais en moyenne, il est bien plus rapide que les tris quadratiques Le tri rapide est en place, mais l'algorithme donn ici n'est pas stable
91
02
Amliorations possibles :
quand le tableau est dj un peu tri , il vaut mieux choisir comme pivot l'lment du milieu du tableau, pour quilibrer les parties
quand le tableau n'est pas un peu tri , on peut dcouvrir l'lment mdian (tel que la moiti des lments du tableau sont plus petits, et la moiti plus grands, 1 prs) avec un algorithme linaire. Cette amlioration assure donc une complexit au pire en O(n*log(n)) au tri rapide. quand les parties trier sont petites, il peut tre plus rapide d'utiliser un tri par slection pour les trier car ce tri est plus rapide sur de petits tableaux ...
12
Complexit du tri-fusion :
la complexit de la fusion est linaire de la forme a*n o a est une constante la complexit du tri est c(n) = c(n/2) + c(n/2) + a*n + b o b est une constante donc c(n) = O(n*log(n)) dans tous les cas
Le tri fusion est donc optimum en complexit, mais gnralement, il est moins rapide que le tri rapide, car il duplique le tableau. On peut optimiser le tri en ne dupliquant qu'une des deux parties. Le tri fusion est stable mais la version propose ici n'est pas en place (il est possible d'en crire des versions en place)
32
42
Comparaison des tris quasilinaires sur des tableaux d'entiers gnrs alatoirement
Tris quasilinaires