IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Simple tri d'un tableau


Sujet :

Collection et Stream Java

  1. #1
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Par défaut Simple tri d'un tableau
    Salut à tous,

    J'ai un tableau "nombre" de 4 éléments (entiers)... Par exemple: |5|3|9|6|

    Je cherche à le trier par un simple code en JAVA!

    Résultat: |3|5|6|9|

    Avez vous des suggestions? Merci

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Il existe une méthode dans l'API effectuant le tri d'un tableau d'entiers (Arrays.sort()).

    Mais s'il s'agit d'un exercice, je suppose que le but est d'implémenter toi-même l'algorithme de tri. Tu as alors plusieurs algorithmes connus te permettant de résoudre le problème :
    • tri à bulles
    • tri par fusion
    • etc.
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Par défaut
    Merci pour votre réponse, mais il s'agit pas d'un exercice

    J'ai essayé de faire ça pour mes connaissances et j'ai pas réussi , c'est pk j'ai posté !

    J'ai un autre problème, entre autre: J'ai une collection HashSet remplie d'éléments de type Personne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    HashSet<Personne> hs = new HashSet<Personne>();
    Iterator<Personne> it = hs.iterator();
    Comment remplir un tableau de type Personne, aussi, par les éléments de HashSet? parceque j'ai travaillé avec ce code et ça n'a pas marché:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int i=0;
    		while (it.hasNext()){
    			lstper[i]=it.next();
    			i++;
     
    		}
    Merci

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Par défaut
    Si tu veux qu'on t'aide facilement, pense toujours à nous détailler pourquoi cela n'a pas marché. Le résultat de l'exécution du code du code, ou l'erreur retourné sur la console.

    Pour ton dernier problème, comment initialise tu ton tableau?

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Par défaut
    Bonjour,

    Voila l'initialisation du Tableau:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Personne [] lstper = new Personne[hs.size()];

  6. #6
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    On a le foreach en Java. Depuis un petit moment en plus !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    HashSet<Personne> hs = new HashSet<Personne>();
    //ICI remplir la liste, sinon elle reste vide.
    Personne[] lstper= new Personne[hs.size()];
    for(Personne personne : hs){
    lstper[i]=personne;
    }
    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  7. #7
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2011
    Messages : 214
    Par défaut
    Et sinon il y a la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Collection.toArray(T[])
    depuis encore plus longtemps que le for each.

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 584
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 584
    Par défaut
    Citation Envoyé par -gma- Voir le message
    Et sinon il y a la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Collection.toArray(T[])
    depuis encore plus longtemps que le for each.
    Nan, la version générique est arrivée en même temps que le foreach .
    Mais elle est plus simple, c'est sûr.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2011
    Messages : 214
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Nan, la version générique est arrivée en même temps que le foreach .
    Mais elle est plus simple, c'est sûr.
    Certes elle n'était pas générique mais elle était bien

  10. #10
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Par défaut
    J'ai réussi à transférer les éléments du HashSet dans un tableau ...

    Reste le problème du trie du tableau, J'ai procédé comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    for (int j=0; j<lstper.length; j++){
    			min = lstper[j];
    			for (int z=j+1; z<lstper.length; z++){
    			if ((min.getAge())>(lstper[z].getAge())){
    				System.out.println("AGE: "+lstper[z].getAge());
    				per=min;
    				min=lstper[z];
    				lstper[z]=per;
     
     
    			}
    			}
    		}
    Remarque: Il s'agit d'un tableau (lstper) de Type Personne (La classe Personne possède un attribut Age)... Je veux avoir un tableau trié par age (l'ordre peut être croissant ou bien decroissant)!!!

  11. #11
    Membre éclairé
    Homme Profil pro
    Architecte senior Java EE/Spring - ScrumMaster
    Inscrit en
    Juin 2010
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte senior Java EE/Spring - ScrumMaster
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 229
    Par défaut
    Et pourquoi pas Arrays#sort avec un petit Comparator<Personne>, déjà ?

  12. #12
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut
    Bonjour,

    Une façon de faire serait que la classe personne implémente l'interface Comparator<Personne>, et redéfinisse la méthode compareTo() comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    @Override
    public int compareTo(Pesonne autrePersonne) {
         if (this.getAge() < autrePersonne.getAge()) {
              return -1;
         }  if (this.getAge() > autrePersonne.getAge()) {
              return 1;
         } else {
              return 0;
         }
    }
    Ensuite, une bonne idée pourrait être également d'utiliser un TreeSet en lieu et place du HashSet, ainsi les données seront directement triées lors de l'insertion d'éléments.

    Mako.

    Edit : Désolé pour la première phrase (totalement fausse) qui n'était que le reste d'un premier jet pas totalement effacé.

  13. #13
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2011
    Messages : 214
    Par défaut
    Citation Envoyé par Mako 5013 Voir le message
    trier la HashSet

  14. #14
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 584
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 584
    Par défaut
    Citation Envoyé par Mako 5013 Voir le message
    Il serait sans doute plus simple de trier la HashSet, et de la convertir par la suite en tableau.
    Un HashSet n'a pas d'ordre, donc non . Mais l'idée d'un TreeSet se tient.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  15. #15
    Membre éclairé
    Homme Profil pro
    Architecte senior Java EE/Spring - ScrumMaster
    Inscrit en
    Juin 2010
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte senior Java EE/Spring - ScrumMaster
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 229
    Par défaut
    Je suis d'accord avec Mako ; même si je préfère effectuer des soustractions au lieu de comparaisons ; la spécification prévoit (et c'est une bonne idée) que les valeurs soient 0, positives, négatives : on économise des lignes de code dans la manipulation de chiffres (surtout depuis l'autoboxing).

  16. #16
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Par défaut
    Le TreeSet n'est pas adapté ici.

    Puisque celui-ci utilise la méthode compareTo pour tester l'égalité de deux objets, il ne pourra alors y avoir qu'une seule personne par valeur pour l'age... Ce qui a mon avis n'est pas l'effet recherché ici

    http://docs.oracle.com/javase/6/docs...l/TreeSet.html

  17. #17
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Par défaut
    Je veut le faire manuellement, c'est à dire sans se référer à Compare ou bien sort()!

    Je veux juste savoir c'est quoi la faute avec mon algorithme!

  18. #18
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Citation Envoyé par L'aigle de Carthage Voir le message
    Je veut le faire manuellement, c'est à dire sans se référer à Compare ou bien sort()!

    Je veux juste savoir c'est quoi la faute avec mon algorithme!
    A l'evidence, ce n'est pas un algorithme de tri. Essaie de donner le pseudo code de ce que tu veux faire. A en juger par ton code, ce n'est pas clair dans ton esprit.

    Sinon, si tu cherches une methode simple à comprendre, tu peux essayer l'algo de tri par selection. Voir ici :
    http://selkis.developpez.com/tutorie...xemples/#LIV.2

  19. #19
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Par défaut
    Tout ce que je cherche, c'est le code pour rendre le tableau de 4 éléments: |5|3|9|6| trié !!!

    Car je vais l'appliquer dans mon cas c'est tt !

    C'est ça le résultat: |3|5|6|9| .

  20. #20
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Le lien que je t'ai donné propose 3 algos de tri
    Essaie d'en ecrire un et, si tu bloques, poste le probleme.

Discussions similaires

  1. Tri d'un tableau en 2D
    Par sniperseb dans le forum C
    Réponses: 4
    Dernier message: 05/01/2006, 16h33
  2. Réponses: 6
    Dernier message: 16/09/2005, 10h30
  3. tri d'un tableau à 2 dimensions
    Par dede92 dans le forum C
    Réponses: 4
    Dernier message: 19/02/2005, 18h29
  4. [langage] Probleme de tri d'un tableau de tableau
    Par Ludo167 dans le forum Langage
    Réponses: 1
    Dernier message: 25/08/2004, 10h32
  5. [] Tri d'un tableau par ordre alphabétique
    Par cafeine dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/09/2002, 08h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo