/* Tri a bulle d'un tableau de chaines */ /* de caracteres */ public class TriBulleTableauDeChaines { ///////////////////////////////////////////////// /* Methode de comparaison de deux chaines */ /* de caracteres 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; char [] t2; int l1; int l2; int i; int res; boolean go; t1 = s1.toCharArray(); t2 = s2.toCharArray(); l1 = t1.length; l2 = t2.length; go = true; res = 0; i = 0; while ( go ) { if ( ( i == l1 ) && ( i == l2 ) ) { go = false; } else { if ( i == l1 ) { res = -1; go = false; } else { if ( i == l2 ) { res = 1; go = false; } else { if ( t1[i] < t2[i] ) { go = false; res = -1; } else { if ( t1[i] > t2[i] ) { go = false; res = 1; } } } } } i = i+1; } return(res); } /* Methode de tri par ordre alphabetique */ /* d'un tableau de chaines de caracteres */ /* Technique de tri: Tri a bulle */ static void triBulleTableauDeChaines(String [] t) { int i; int j; String aux; boolean permutation; int ne = t.length-1; int np = t.length-1; int cpt = 0; do { cpt = cpt+1; permutation = false; for ( j = 0 ; j < np ; j = j+1 ) { if ( ordre(t[j],t[j+1]) > 0 ) { aux = t[j]; t[j] = t[j+1]; t[j+1] = aux; permutation = true; } } np = np-1; } while ( permutation && ( cpt < ne ) ) ; } ///////////////////////////////////////////////// /* Methode d'affichage d'un tableau */ /* de chaines de caracteres */ static void affichage(String [] ts) { int i; for ( i = 0 ; i < ts.length ; i = i+1 ) { Ecran.afficherln(ts[i]); } } /* Methode de tirage au sort d'un nombre */ /* entier compris dans un intervalle [min,max] */ static int random(int min,int max) { int v; v = min +(int) (Math.random()*(max-min+1)); return v; } /* Methode de creation d'une chaine */ /* de caracteres de longueur comprise */ /* entre lMin et lMax composee de caracteres */ /* minuscules tires au sort */ static String chaineDeCaracteres(int lMin,int lMax) { String s; int l; int i; char c; l = random(lMin,lMax); s = ""; for ( i = 0 ; i < l ; i = i+1 ) { c =(char) random(97,122); s = s + c; } return s; } /* Programme principal */ public static void main(String [] args) { int n; int lMin; int lMax; String [] ts; int i; Ecran.afficher("Nombre de chaines? "); n = Clavier.saisirInt(); Ecran.afficher("Longueur minimale? "); lMin = Clavier.saisirInt(); Ecran.afficher("Longueur maximale? "); lMax = Clavier.saisirInt(); ts = new String[n]; for ( i = 0 ; i < n ; i++ ) { ts[i] = chaineDeCaracteres(lMin,lMax); } Ecran.sautDeLigne(); affichage(ts); Ecran.sautDeLigne(); triBulleTableauDeChaines(ts); affichage(ts); } }