Tri décroissant d'un vector

Résolu
sihem hcine Messages postés 113 Date d'inscription   Statut Membre Dernière intervention   -  
sihem hcine Messages postés 113 Date d'inscription   Statut Membre Dernière intervention   -
bonsoir ,
Quelqu'un SVP m'aider mon but est de trier un vector des objets décroissant
Je procede comme suit : Collections.reverse(File_Prêt);mais ça ne marche pas
(file pret est un vector des objets processus , u processus ayant comme attributs nom , note (integer) . Je veux trier ce vector par ordre decroissant des notes quelqu'un m'aide SVP

2 réponses

Odenelle Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   20
 
Salut,

Collections.reverse(File_Prêt.note)


Si ça ne marche pas alors je te conseille de faire un bon tri à l'ancienne avec les indices de tes objets (si tu veux opti, je te conseille le Quicksort il est puissant et assez facile à utiliser)
0
sihem hcine Messages postés 113 Date d'inscription   Statut Membre Dernière intervention  
 
ça ne marche pas puisque la note est un attribut d'objet de type processus.. comment on utilise le quicksort ,pourriez vous m'expliquer le principe SVP
0
Odenelle Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   20
 
ah désolé, je ne connais pas les objets processus.
Voila une page expliquant très bien le principe du quicksort :
http://openclassrooms.com/courses/le-tri-rapide-qsort

J'ai oublié de te préciser mais si ton tableau est déjà plus où moins trié mieux vaut choisir un autre tri (par insertion par ex)
0
sihem hcine Messages postés 113 Date d'inscription   Statut Membre Dernière intervention  
 
okk merciii beaucouup ^^
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

Collections.reverse
prends une liste et renvoie une liste où les éléments sont pris en sens inverse (le premier en dernier etc.)
Cela n'est donc utile pour faire un tri décroissant que si la liste est déjà triée dans l'ordre croissant, avec
Collections.sort
par exemple.

Deux cas de figure :

1) La classe Processus implémente l'interface Comparable<Processus> et définit la méthode
compareTo(Processus)
de sorte à comparer les notes des processus.
Dans ce cas tu peux faire un Collections.sort(filePret); pour les trier dans l'ordre croissant puis un Collections.reverse(filePret); pour obtenir l'ordre décroissant.

2) La classe Processus n'implémente pas l'interface Comparable<Processus> ou définit une méthode compareTo(Processus) qui ne compare pas avec les notes des processus.
Dans ce cas il faut construire un objet Comparator<Processus> dont la méthode
compare(Processus,Processus)
permet d'ordonner deux objets Processus par note décroissante. Il suffit ensuite d'appeler Collections.sort(filePret, comparator); pour trier les valeurs dans cet ordre.

Voici un exemple dans le deuxième cas.

En Java 5,6,7 :

Comparator<Processus> comparator = new Comparator<Processus>() {
    @Override
    public int compare(Processus p1, Processus p2) {
        return p2.getNote() - p1.getNote();
    }
};

List<Processus> list = Collections.sort(filePret, comparator);

En Java 8, on peut remplacer le Comparator par une expression lambda :

List<Processus> list = Collections.sort(filePret,
    (p1,p2) ->  p2.getNote() - p1.getNote());

La confiance n'exclut pas le contrôle
0
sihem hcine Messages postés 113 Date d'inscription   Statut Membre Dernière intervention  
 
mercii beaucoup mon problème a été resolu , j'utilise la 2 eme méthode
0