Problème Ø Trier un tableau d éléments de même type Algorithmes de tri Le type des éléments doit être muni d une relation d ordre Ø Exemple Avant : Après : 8 12 5 35 21 3 3 5 8 12 21 35 Ø Algorithme (s) ? NF01 NF01 Tri par sélection Simulation Ø Principe • • • • • • On suppose qu on connaît le nb d éléments n On cherche le minimum On le place en premier élément (on échange) On cherche le minimum suivant On le place en 2ème position Et ainsi de suite 8 3 3 3 3 3 12 5 35 21 3 12 5 35 21 8 5 12 35 21 8 5 8 35 21 12 5 8 12 21 35 5 8 12 21 35 NF01 Algorithme ? Algorithme Ø Pour i allant de 1 à n-1 • Chercher le minimum ü ü • NF01 dans la partie du tableau commençant à l’indice i (avec son indice) Permuter l’élément d’indice i avec le minimum NF01 pour i allant de 1 à n-1 min ← T[i] indiceMin ← i pour j allant de i+1 à n si T[j] < min alors min ← T[j] indiceMin ← j fin si fin pour Echanger T[i] et T[indiceMin] fin pour NF01 1 Tri par insertion Simulation Ø Principe • • On considère qu une partie des éléments est ordonnée On insère au bon endroit 8 3 3 3 3 3 12 12 5 5 5 5 5 5 12 12 12 8 35 35 35 35 21 12 21 21 21 21 35 21 3 8 8 8 8 35 NF01 NF01 Algorithme Tri par échange (tri à bulles) On cherche le min, on le met au début. Pour i allant de 2 à n-1 elt ← T[i+1] k ← i tant que elt < T[k] faire {on décale à droite T[k+1] ← T[k] les éléments > = elt } k ← k-1 fin tant que T[k+1] ← elt {on met elt au bon endroit} fin pour Ø Principe • On échange les éléments 2 à 2 en les réordonnant => Les éléments mal classés remontent dans la liste comme des bulles à la surface d un liquide Ø Efficacité • Dépend du tableau initial • Efficace si le tableau est presque trié NF01 Simulation 8 8 5 5 5 3 12 5 8 8 3 5 5 12 12 3 8 8 35 21 3 12 12 12 21 3 21 21 21 21 NF01 Algorithme nbElts ← n {nb elts restant à classer } echange ← vrai {echange est vrai s il y a eu un echange} tant que echange faire echange ← faux max ← nbelts pour i allant de 1 à max-1 faire si T[i] > T[i+1] alors echanger T[i] et T[i+1] echange ← vrai nbelts ← i fsi fpour ftq 3 35 35 35 35 35 NF01 NF01 2 Simulation Tri rapide Ø Interstices Ø Tri récursif Ø http://interstices.info/jcms/c_6973/les-algorithmes-de-tri Ø Principe On choisit une valeur pivot On sépare dans le tableau les éléments inférieurs à cette valeur et les éléments supérieurs On trie ensuite chacune des deux parties du tableau en suivant le même principe NF01 Tri rapide NF01 fonction Partitionner(T, premier, dernier) i,j,v : entier tri_rapide(t, premier, dernier) v ← T[dernier] début { pivot } i ← premier; j ← dernier-1 si premier < dernier alors tant que i <= j faire i := partitionner(t,premier, dernier) tant que i < dernier et T[i] <= v faire i ← i + 1 tri_rapide(t, premier, i - 1) tant que j >= premier et T[j] >= v faire j ← j - 1 si i < j alors echanger T[i] et T[j] tri_rapide(t, i + 1, dernier) fin tant que fin si T[dernier] ← T[i] fin T[i] ← v retourner i NF01 NF01 3