1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
| //methode qui retourne une liste des valeurs <= e
public Liste_chaînée Less_or_equals(int e){
Cellule c = tete;
Liste_chaînée l = new Liste_chaînée();
while(c!=null){
if (c.valeur <= e)
l.Cons(c.valeur); //cons ajoute une valeur en début de liste
c = c.suivant;
}
return l;
}
//retourne une liste des valeurs > e
public Liste_chaînée More_than(int e){
Cellule c = tete;
Liste_chaînée l = new Liste_chaînée();
while(c!=null){
if (c.valeur > e)
l.Cons(c.valeur);
c = c.suivant;
}
return l;
}
//methode qui va concaténer toutes les listes crées et triées
public Liste_chaînée Concatener (Liste_chaînée l1, Liste_chaînée l2){
Liste_chaînée l = new Liste_chaînée();
if(l1 != null)
l = l1;
if (l2 != null){
Cellule tmp = l2.tete;
while (tmp !=null){
l.Snoc(tmp.valeur);
tmp=tmp.suivant;
}
}
return l;
}
//methode de tri rapide
public Liste_chaînée Tri_rapide (){
if (tete == null || tete.suivant == null)
return this;
else {
Liste_chaînée l1 = Less_or_equals(tete.valeur);
Liste_chaînée l2 = More_than (tete.valeur);
l1 = l1.Tri_rapide();
l2 = l2.Tri_rapide();
return Concatener(l1,l2);
}
} |
Partager