Algorithmique et programmation Informatique Cours 11 26/11/2001
Les tris Indice, numéro dordre Valeurs à trier Valeurs triées
Les tris
Les tris Tri bulle Insertion linéaire Quicksort Tri Shell Fusion
Tris: bulle Procedure tri_bulle ( Z: M ) variables i, j: entier; corps i 1; répéter pour j de 1 à N - i faire si Z j > Z j+1 alors Z j+1 Z j fsi fpour i i + 1 jusquei = N - 1 fproc 1_tri_bulle ƒ
Tris: insertion linéaire Procedure tri_insertion ( Z: M ) variables i, j: entier;sauve: réel; corps pour i de 2 à N faire sauve Z i ;j i - 1 tant que sauve 1 faire Z j+1 Z j j j - 1 ftant si sauve < Z j alors Z j+1 Z j ; Z j sauve sinon Z j+1 sauve fsi fpour fproc 2_insertion_linéaire ƒ
Tris: insertion linéaire Nombre de comparaisons nécessaires : si les nombres à trier sont disposés « au hasard » alors
Tris: insertion linéaire Nombre de comparaisons nécessaires: Si j éléments sont déjà triés Pour placer le j+1 ième nombres de comparaisons: j / 2 Pour les placer tous
Tris: Quicksort Procedure tri_quick (Z: M ; debut, fin: entier ) variables i, j: entier ; pivot: réel; corps si fin - debut > 0 alors pivot Z debut i debut +1;j fin r épéter tant que Zi < pivot et i < j faire i i + 1 ftant tant que Zj > pivot et i j faire j j - 1 ftant si < j alors Z i Z j ; j j - 1 fsi i i + 1 jusque i > j Z j Z debut tri_quick (debut, j-1) tri_quick (j+1, fin) fsi fproc 3_tri_quicksort ƒ
Tris: Quick Nombre de comparaisons nécessaires: Pour le premier vecteur: n comparaisons Pour les deux deuxièmes vecteurs: n/2 et n/2soitn comparaisons Pour les quatres vecteurs: n/4n/4 n/4 n/4soit n comparaisons Nombre de fois que nous pouvons « couper » en deux sous- vecteurs: log 2 n
Tris: comparaison Nombre de comparaisons en moyenne N =2kk2kk Séquentielle ~ n 2 /4 Dichotomique ~ n log 2 n
Tris: Shell Procedure tri_shell ( Z: M ) variables h, i, j, ii, jj, k: entier ; sauve: réel; corps h 1 tant que h (4 * n - 9) ÷ 3 faire h 3 * h + 1 ftant répéter pour i de 1 à h faire jj i pour j de i + 1 à n ÷ h faire jj jj + h;k jj - h; sauve Z ij tant que (sauve h) faire Z k + h Z k ; k k - hftant si sauve < Z k alorsZ k + h Z k ; Z k sauve sinonZ k + h sauvefsi fpour h (h - 1) div 3 jusquà h < 1 fproc
Tris: comparaisons Bloc tri constanten = … typev = vecteur 1 à 200 dentiers variablesR, S, T: v k: entier corps Lire (T) R T;S T; lineaire(R, n); shell(S, n); quick(T, 1, n); pour k de 1 à n faire écrire(k, R k, S k, T k ) fpour fbloc. 4a_trois_tri_tick (80) ƒ 4b_trois_tri_tick(5000) ƒ
Tris: entités bloc test constantemax = 500; typefiche enregistrement numero: entier; denom: vecteur de caractères fin v = vecteur 1..max de fiche variables liste: v ;j, k: entiers; corps initialisation(liste); pour k de1 à 20 faire écrire (numero de liste k ); écrire(denom de liste k ) fpour trilin(liste, max); pour k de1 à 20 faire écrire (numero de liste k ); écrire(denom de liste) fpour fin bloc 5_test tri entité ƒ
Tris: entités procedure trilin (x: v ; n: entier); variablesj, k: entiers;sauve: fiche; corps pour k de 2 à n faire j k - 1;sauve x k ; tant que (sauve.numero 1) faire x j + 1 x j ; j j - 1 ftant; si sauve.numero < x j.numero alors x j + 1 x j ; x j sauve sinon x j + 1 sauve fsi fpour fproc 5_test tri entité ƒ
Tris: stabilité Soit le vecteur Deux des composantes sont égales. Notons les 7a et 7b respectivement. Le vecteur s'écrit: 5 2 7a 7b Tri est stable a 7b 9 Tri n'est pas stable b 7a 9
Tris: stabilité JulesDurand AnnemarieDupont PierreDupré AnneDupont AnneDupont AnnemarieDupont JulesDurand PierreDupré AnnemarieDupont AnneDupont PierreDupré JulesDurand Tri sur le prénom Tri instable sur le nom