/* Tri a bulle d'un tableau de chaines */ /* de caracteres */ public class TriBulleTableauDeChaines { ///////////////////////////////////////////////// /* Fonction de comparaison de deux chaines */ /* de caracteres de longueurs identiques */ /* vis a vis de l'ordre alphabetique */ /* Valeur entiere retournee: */ /* 0 si chaines egales */ /* -1 si la premiere chaine est avant */ /* la seconde par ordre alphabetique */ /* 1 si la premiere chaine est apres */ /* la seconde par ordre alphabetique */ static int ordre(String s1,String s2) { char [] t1 = Chaine.tableauCaracteres(s1); char [] t2 = Chaine.tableauCaracteres(s2); int lc = t1.length; int res = 0; int i = 0; boolean go = true; while ( go ) { if ( i == lc ) { go = false; } else { if ( t1[i] < t2[i] ) { go = false; res = -1; } else { if ( t1[i] > t2[i] ) { go = false; res = 1; } } } i++; } return(res); } /* Fonction de tri par ordre alphabetique */ /* d'un tableau de chaines de caracteres */ /* Technique de tri: Tri a bulle */ static void triBulleTableauDeChaines(String [] t) { String aux; boolean permutation; int np = t.length-1; do { permutation = false; for ( int j = 0 ; j < np ; j++ ) { if ( ordre(t[j],t[j+1]) > 0 ) { aux = t[j]; t[j] = t[j+1]; t[j+1] = aux; permutation = true; } } np--; } while ( permutation ) ; } ///////////////////////////////////////////////// /* Fonction d'affichage d'un tableau */ /* de chaines de caracteres */ static void affichage(String [] ts) { for ( int i = 0 ; i < ts.length ; i++ ) { Ecran.afficherln(ts[i]); } } /* Fonction de tirage au sort d'un nombre */ /* entier compris dans un intervalle [min,max] */ static int random(int min,int max) { int v = min +(int) (Math.random()*(max-min+1)); return v; } /* Fonction de creation d'une chaine */ /* de caracteres de longueur l */ /* et composee de caracteres */ /* minuscules tires au sort */ static String chaineDeCaracteres(int l) { String s = ""; char c; for ( int i = 0 ; i < l ; i++ ) { c =(char) random(97,122); s = s + c; } return s; } /* Programme principal */ public static void main(String [] args) { int n; int l; String [] ts; Ecran.afficher("Nombre de chaines? "); n = Clavier.saisirInt(); Ecran.afficher("Longueur? "); l = Clavier.saisirInt(); ts = new String[n]; for ( int i = 0 ; i < n ; i++ ) { ts[i] = chaineDeCaracteres(l); } Ecran.sautDeLigne(); affichage(ts); Ecran.sautDeLigne(); triBulleTableauDeChaines(ts); affichage(ts); } }