/**
* Le tri par insertion est basé sur un parcours de la séquence donnée.
* A chaque étape, il insère le nouvel élément courant dans la séquence triée.
* COMPLETER LA METHODE trier() suivant l'algorithme du tri par insertion.
*/
import inf231v.sequences.Observateur;
public class TriInsertion {
SequenceContigueLongueurExplicite seq;
Observateur obs = null;
int nbComp = 0;
int nbModif = 0;
/**
* construit un TriInsertion observable prenant ses données dans "data"
*
*/
public TriInsertion () {
this("data", true);
}
/**
* construit un TriInsertion prenant ses données dans "data".
* Ce tri est observable ssi observable est vrai.
*
*/
public TriInsertion (boolean observable) {
this("data", observable);
}
/**
* construit un TriInsertion prenant ses données dans filename.
* Ce tri est observable ssi observable est vrai.
*
*/
public TriInsertion (String filename, boolean observable) {
seq = new SequenceContigueLongueurExplicite(filename);
if (observable) {
obs = new Observateur("Tri par insertion");
}
}
public TriInsertion (int l, boolean observable) {
seq = new SequenceContigueLongueurExplicite(l);
if (observable) {
obs = new Observateur("Tri insertion", 3);
}
}
/**
* Réaliser la méthode trier() suivant l'algorithme de tri par insertion
* Ajouter l'affichage de la séquence grâce à l'observateur obs
* Méthodes dessineSequence(seq.t, seq.l), enRouge(i) et enBlanc(i)
*/
public void trier() {
// A COMPLETER
if (obs != null) {
obs.dessineSequence(seq.t, seq.l);
}
//tri
int i =0;
int j =0;
int tmp = 0;
while(i != seq.l){
j = i;
tmp=seq.t[i];
while(j != 0 && seq.t[j-1] > tmp){
nbComp++;
nbModif++;
seq.t[j] = seq.t[j-1];
j--;
}
seq.t[j] = tmp;
i++;
if (obs != null) {
obs.dessineSequence(seq.t, seq.l);
obs.affiche("i = " + i);
obs.dormir();
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TriInsertion triins;
/**triins.seq.afficher();
triins.trier();
triins.seq.afficher();*/
int i =0;
double sommeComp = 0;
double sommeModif = 0;
while(i != 100){
triins = new TriInsertion(100, false);
triins.trier();
sommeComp += triins.nbComp;
sommeModif += triins.nbModif;
System.out.println("Tri numero "+ i +" : nbComp = " + triins.nbComp + ", nbModif = " + triins.nbModif);
i++;
}
System.out.println("Moyenne des 100 tries : moyComp = "+(sommeComp/100.)+", moyModif = "+(sommeModif/100.));
}
}