/**
* Le tri minimum est basé sur un parcours de la séquence de résultat.
* A chaque étape, il calcul le nouvel élément courant (élément du résultat)
* Cet élément est le minimum de R (partie restant à parcourir).
*
* Compléter la méthode public void trier()
*/
import inf231v.sequences.Observateur;
/**
* @author serasset
*
*/
public class TriMinimum {
SequenceContigueLongueurExplicite seq;
Observateur obs = null;
int nbComp = 0;
int nbModif = 0;
/**
* construit un TriMinimum observable prenant ses données dans "data"
*
*/
public TriMinimum () {
this("data", true);
}
/**
* construit un TriMinimum prenant ses données dans "data".
* Ce tri est observable ssi observable est vrai.
*
*/
public TriMinimum (boolean observable) {
this("data", observable);
}
/**
* construit un TriMinimum prenant ses données dans filename.
* Ce tri est observable ssi observable est vrai.
*
*/
public TriMinimum (String filename, boolean observable) {
seq = new SequenceContigueLongueurExplicite(filename);
if (observable) {
obs = new Observateur("Tri par sélection du minimum");
}
}
/**
* construit un TriMinimum prenant ses données dans une séquence de taille l,
* de valeur générées aléatoirement.
* Ce tri est observable ssi observable est vrai.
*
*/
public TriMinimum (int l, boolean observable) {
// génération d'une séquence aléatoire
seq = new SequenceContigueLongueurExplicite(l);
if (observable) {
obs = new Observateur("Tri par sélection du minimum", 2);
}
}
/**
* A compléter suivant l'algorithme du tri par recherche du minimum
*/
public void trier() {
if (obs != null) {
obs.dessineSequence(seq.t, seq.l);
}
int i = 0;
while(i != seq.l-1) {
//A COMPLETER
int imin = i;
int j = i+1;
while(j != seq.l){
nbComp++;
if(seq.t[imin] > seq.t[j]){
imin = j;
}
j++;
}
nbModif++;
int tmp = seq.t[i];
seq.t[i] = seq.t[imin];
seq.t[imin] = tmp;
// Avancer
i = i+1;
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
TriMinimum trimin;
//trimin.seq.afficher();
//trimin.trier();
//trimin.seq.afficher();
int i =0;
double sommeComp = 0;
double sommeModif = 0;
while(i != 100){
trimin = new TriMinimum(100, false);
trimin.trier();
sommeComp += trimin.nbComp;
sommeModif += trimin.nbModif;
System.out.println("Tri numero "+ i +" : nbComp = " + trimin.nbComp + ", nbModif = " + trimin.nbModif);
i++;
}
System.out.println("Moyenne des 100 tries : moyComp = "+(sommeComp/100.)+", moyModif = "+(sommeModif/100.));
}
}