[ Institut Supérieur d'Informatique et Techniques de Communication Hammam Sousse ] Projet Algorithme avancée sur la comparaison des deux tris Elaborée par : onsmayeh Class : 1MPSWM Amira Bannour Année universitaire : 2013/2014 Sommaire I. Introduction :....................................................................................................................................... 3 Tri a bulle : ...................................................................................................................................... 3 a. Code ............................................................................................................................................ 3 i. Mode algorithme ..................................................................................................................... 3 ii. Mode java............................................................................................................................... 3 b. Principe de tri a bulle : ................................................................................................................ 4 c. Complexité : ................................................................................................................................ 5 2. Tri par sélection .............................................................................................................................. 5 a. Code ............................................................................................................................................ 5 i. Mode algorithme : ........................................................................................................................... 5 ii. Mode java........................................................................................................................................ 5 b. Principe ....................................................................................................................................... 6 c. Complexité : ................................................................................................................................ 6 II. Comparaison entre ces deux tris par rapport ales temps d’exécution : ............................................... 6 1. Code de calcule de temps d’exécution :.............................................................................................. 7 2. Etude théorique : ................................................................................................................................. 7 III. Conclusion .......................................................................................................................................... 8 1. 1 Table et figure Tableau 1 : tableau de resultat de temps d'exécution ............................................................................... 7 Figure 1 : comparaisson de deux tri ............................................................................................................ 8 2 I. Introduction : Dans ce rapport on va comparer les deux algorithmes de tri par rapport a leur d’exécution et leur efficacité dans ce la on va représenter ces deux code et les courbes . Nous avons prendre deux type d’algorithmes a comparer qui sont tri a bulle et tri a sélection Nous allons présenter ces deux algorithmes en java et en mode algorithmique 1. Tri a bulle : Le tri à bulles est un algorithme de tri qui consiste à faire augmenter progressivement les plus grands éléments d'un tableau a. Code i. Mode algorithme Algorithme Tri a Bulles Local: i , j , n, temp Î Entiers naturels Entrée : Tab Î Tableau d'Entiers naturels de 1 à n éléments Sortie : Tab Î Tableau d'Entiers naturels de 1 à n éléments Début Pour i de n jusqu’à 1 faire // recommence une sous-suite (a1, a2, ... , ai) Pour j de 2 jusqu’à i faire // échange des couples non classés de la sous-suite Si Tab[ j-1 ] > Tab[ j ] alors // aj-1et aj non ordonnés Temp ¬ Tab [ j-1 ] ; Tab [ j-1 ] ¬ Tab[ j ] ; Tab[ j ] ¬ temp //on échange les positions de aj-1et aj Fin si Fin pour Fin pour Fin Tri a Bulles ii. Mode java import java.io.*; public class Triabulle extends tableau { /* Fonction de tri a bulle d'un tableau d'entiers */ public static void triABulle(int [] t) { /* Definition et initialisation a vrai d'un booleen */ /* pour indiquer qu'une permutation a eu lieu lors d'un */ /* parcours a la recherche de permutations a realiser */ boolean permutation = true; /* Definition est initialisation de la variable entiere */ /* qui indique l'indice du prochain maximum a envoyer */ /* en bout de tableau par permutations successives */ int limite = t.length-1; int i; int val; /* Tant qu'au moins une permutation a eu lieu au cours */ /* de la passe precedente */ while ( permutation ) { /* Pour l'instant aucune permutation n'a eu lieu au cours */ 3 /* de cette passe */ permutation = false; /* Parcours de t a la recherche de permutations pour tous */ /* les couples de valeurs d'indice i et i+1 pour i variant */ /* de 0 a limite-1 */ for ( i = 0 ; i < limite ; i++ ) { /* Si une permutation doit etre realisee */ if ( t[i] > t[i+1] ) { /* Permutation */ val = t[i]; t[i] = t[i+1]; t[i+1] = val; /* Le booleen permutation passe a vrai pour indiquer */ /* qu'un moins une permutation a eu lieu au cours */ /* de cette passe */ permutation = true; } } /* Un nouveau maximum a ete "pousse" a sa place */ /* -> La limite de recherche est decrementee de 1 */ limite--; } } /* Fonction principale */ public static void main(String [] args) throws IOException { int n; /* Lecture clavier de l'indice de debut de recherche */ System.out.println("Taille du tableau:"); n = Integer.valueOf(flux.readLine()).intValue(); /* Définition et allocation d'un tableau de 10 entiers */ /* tires au sort entre 0 et 5 */ int [] tab = new int[n]; initialisation Tableau(tab,100); System.out.println("Le tableau contient les valeurs suivantes:"); /* Appel a la fonction d'affichage */ affichage Tableau(tab); System.out.println(); /* Appel a la fonction de tri a bulle */ triABulle(tab); System.out.println("Le tableau trie est:"); /* Appel a la fonction d'affichage */ affichageTableau(tab); // temps d’éxécution long begin = System.currentTimeMillis(); float t=(float) begin/1000f; System.out.println("le temps d'exécution est :"+t); } } b. Principe de tri a bulle : Le principe du tri bulle est de comparer deux a deux les élément i et i+1 successivement d’un tableau et d’effecteur une permutation si i>i+1.on continue de trier jusqu’à ce qu’il n’y ait plus de permutation 4 c. Complexité : 1 C= i 1 ∑ ( ∑ n)= ∑ n-1 = n (n _ 1)/2 = O(n2) i=n j=2 i=n 2. Tri par sélection Le tri par sélection (ou tri par extraction) est un algorithme de tri par comparaison. Pour cela nous allons le présenter en mode algorithme de ce tri : a. Code i. Mode algorithme : Entrée : T liste de n nombres. Sortie : liste T triée Traitement : Pour j de 1 _a n � 1 Indice Min :=j Pour k de j + 1 _a n si T[k] < T[j ] alors indice Min:= k _nSi fin Pour Echange de T[j ] et T[indice Min] si j 6= indice Min Fin Pour ii. Mode java import java.io.*; public class Triselection extends tableau { static void TriSelect (int [] t ) { // sous-programme de Tri par sélection int n = t.length-1; for ( int i = 1; i <= n-1; i++) { // recommence une sous-suite int m = i; // i est l'indice de l'élément frontière ai = table[ i ] for ( int j = i+1; j <= n; j++) // (ai+1, a2, ... , an) if (t[ j ] < t[ m ]) // aj est le nouveau minimum partiel m=j; // indice mémorisé //on échange les positions de ai et de aj : int temp = t[ m ]; t[ m ] = t[ i ]; t[ i ] = temp; }} public static void main(String [] args) throws IOException { int n; /* Lecture clavier de l'indice de debut de recherche */ System.out.println("Taille du tableau:"); n = Integer.valueOf(flux.readLine()).intValue(); /* Définition et allocation d'un tableau de 10 entiers */ 5 /* tires au sort entre 0 et 5 */ int [] tab = new int[n]; initialisation Tableau(tab,100); System.out.println("Le tableau contient les valeurs suivantes:"); /* Appel a la fonction d'affichage */ affichage Tableau(tab); System.out.println(); /* Appel a la fonction de tri a sélection */ TriSelect(tab); System.out.println("Le tableau trie est:"); /* Appel a la fonction d'affichage */ affichageTableau(tab); // temps d’éxécution long begin = System.currentTimeMillis(); float t=(float) begin/1000f; System.out.println ("le temps d'exécution est :"+t); }} b. Principe Sur un tableau de n éléments (numérotés de 1 à n), le principe du tri par sélection est le suivant : rechercher le plus petit élément du tableau, et l'échanger avec l'élément d'indice 1 ; rechercher le second plus petit élément du tableau, et l'échanger avec l'élément d'indice 2 ; continuer de cette façon jusqu'à ce que le tableau soit entièrement trié. c. Complexité : n_1 n ∑ (∑ 1)= j=1 k=j+1 n_1 ∑ n-j j=1 = n (n-1)/2 II. Comparaison entre ces deux tris par rapport ales temps d’exécution : Pour faire la comparaison entre ces deux algorithmes on a utilisé le même tableau pour le calculer le temps d’exécution Code java de tableau : import java.io.BufferedReader; import java.io.InputStreamReader; public class tableau { static BufferedReader flux = new BufferedReader(new InputStreamReader(System.in)); /* Fonction d'affichage de tous les entiers contenus */ /* dans un tableau d'entiers */ public static void affichage Tableau(int [] t) { int i; /* Pour toutes les valeurs d'indice 0 a t.length-1 inclus */ for ( i = 0 ; i < t.length ; i++ ) System.out.println(t[i]); } /* Fonction d'initialisation de tous les entiers */ /* contenus dans un tableau d'entiers */ /* avec une valeur tiree au sort entre 0 et max inclus */ 6 public static void initialisation Tableau(int [] t,int max) { int i; /* Pour toutes les valeurs d'indice 0 a t.length-1 inclus */ for ( i = 0 ; i < t.length ; i++ ) { /* Initialisation de t[i] avec un entier tire */ /* au hasard entre 0.0 (inclu) et max+1 (exclu) */ t[i] =(int) ((max+1)*Math.random()); } } } 1. Code de calcule de temps d’exécution : long begin = System.currentTimeMillis(); float t=(float) begin/1000f; System.out.println ("le temps d'exécution est :"+t); 2. Etude théorique : Pour comparer ces deux tri Nous avons exécuté les deux tri a différent taille de tableau Pour cela on a mentionné un tableau a trois colonnes qui contient la taille de tableau avec les résultat de temps d’exécution de chaque taille tableau dans un document Excel Pour conclure on a utilisé une courbe pour les résultats de ces deux algorithmes Tableau 1 : tableau de resultat de temps d'exécution Taille de tableau Tri sélection(ms) tri a bulle(ms) 50 138273024 138273088 100 138273024 138273101 150 138273050 138273101 200 138273050 138273101 250 138273050 138273101 300 138273050 138273101 350 138273050 138273101 400 138273050 138273101 7 Figure 1 : comparaisson de deux tri III. Conclusion Après l’étude exprimable et théorique de ces deux algorithme nous conclus que l’algorithme tri par sélection est plus rapide que l’algorithme tri a bulle et aussi elle est plus efficace 8