import inf231v.sequences.Observateur;
public class TriBulle {
SequenceContigueLongueurExplicite seq;
Observateur obs = null;
int nbComp = 0;
int nbModif = 0;
/**
* construit un TriBulle observable prenant ses données dans le fichier "data"
*
*/
public TriBulle () {
this("data", true);
}
/**
* construit un TriBulle prenant ses données dans "data".
* Ce tri est observable ssi observable est vrai.
*
*/
public TriBulle (boolean observable) {
this("data", observable);
}
/**
* construit un TriBulle prenant ses données dans filename.
* Ce tri est observable ssi observable est vrai.
*
*/
public TriBulle (String filename, boolean observable) {
seq = new SequenceContigueLongueurExplicite(filename);
if (observable) {
obs = new Observateur("Tri par sélection du minimum");
}
}
public TriBulle (int l, boolean observable) {
seq = new SequenceContigueLongueurExplicite(l);
if (observable) {
obs = new Observateur("Tri par sélection du minimum", 3);
}
}
/**
* Réaliser la méthode trier() suivant l'algorithme de tri bulle
* Ajouter l'affichage de la séquence grâce à l'observateur obs
* Méthodes dessineSequence(seq.t, seq.l)
*/
public void trier() {
if (obs != null) {
obs.dessineSequence(seq.t, seq.l);
}
// A COMPLETER
int i = seq.l;
int j = 0;
int tmp;
while(i > 1){
j=0;
while(j < i-1){
nbComp++;
if(seq.t[j] > seq.t[j+1]){
nbModif++;
tmp = seq.t[j];
seq.t[j] = seq.t[j+1];
seq.t[j+1] = tmp;
}
j++;
}
i--;
if (obs != null) {
obs.dessineSequence(seq.t, seq.l);
obs.affiche("i = " + i);
obs.affiche("nbComp = " + nbComp);
obs.affiche("nbModif = " + nbModif);
obs.dormir();
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TriBulle trib;
//trib.seq.afficher();
//trib.trier();
//System.out.println("---------");
//trib.seq.afficher();
int i =0;
double sommeComp = 0;
double sommeModif = 0;
while(i != 100){
trib = new TriBulle(100, false);
trib.trier();
sommeComp += trib.nbComp;
sommeModif += trib.nbModif;
System.out.println("Tri numero "+ i +" : nbComp = " + trib.nbComp + ", nbModif = " + trib.nbModif);
i++;
}
System.out.println("Moyenne des 100 tries : moyComp = "+(sommeComp/100.)+", moyModif = "+(sommeModif/100.));
}
}