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 :

tri decroissant tableau à 2 dimensions


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut tri decroissant tableau à 2 dimensions
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    ClientMatrix [clientID][articleID]= prixPayed;
    je voudrais trier ce tableau d'entiers à 2 dimensions par ordre décroissant. je souhaite récupérer pour chaque client les 10 plus cher articles achetés.

    Quelqu'un aurait une idée?

    Merci

  2. #2
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 698
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for (int j =0; j<ClientMatrix.length; j++ ){
        System.out.println("Client "+j+" :");
        Arrays.sort(ClientMatrix[j]);
        for( int i=ClientMatrix[j].length-1; i>=0 && i >= ClientMatrix[j].length-10; i--){
            System.out.println(ClientMatrix[j][i]);
        }
    }
    édition: les résultats n'étaient pas affichés par ordre décroissant

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut
    Merci Uther pour ta réponse,
    je viens de tester ton code, ça m'affiche toutes les valeurs de la matrice mais qui ne sont pas triées selon l'ordre décroissant.
    Au lieu de faire un print, est-ce que je pourrais copier les 10 articles les + chers ainsi que leurs prix dans un autre tableau et le retourner?

    Merci

  4. #4
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut
    Merci pour vos réponses.
    ça marche maintenant avec ce code (j'ai changé quand même le || en &&), j'ai besoin juste de retourner en résultat les données triées dans un autre tableau au lieu de faire un print.


    Citation Envoyé par Uther Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for (int j =0; j<ClientMatrix.length; j++ ){
        System.out.println("Client "+j+" :");
        Arrays.sort(ClientMatrix[j]);
        for( int i=ClientMatrix[j].length-1; i>=0 &&  i >= ClientMatrix[j].length-10, i--){
            System.out.println(ClientMatrix[j][i]);
        }
    }
    édition: les résultats n'étaient pas affichés par ordre décroissant

  5. #5
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    pour compléter le code d'Uther

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public Object[] getTableau(){
    Object[][] result = new Object[??][10];
    for (int j =0; j<ClientMatrix.length; j++ ){
        System.out.println("Client "+j+" :");
        Arrays.sort(ClientMatrix[j]);
        for( int i=ClientMatrix[j].length-1; i>=0 &&  i >= ClientMatrix[j].length-10; i--){
            result[j][i] =  ClientMatrix[j][i]);
        }
    return result;
    }

  6. #6
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut
    il marche bien ce code, merci.
    Par contre ici on ne garde plus les réf d'origine des articles achetés par les clients, puisque le i recupère plutôt la taille "ClientMatrix[j].length-1...".
    on ne peut pas avoir dans le "result" ces réf?

    Citation Envoyé par Ivelios Voir le message
    pour compléter le code d'Uther

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public Object[] getTableau(){
    Object[][] result = new Object[??][10];
    for (int j =0; j<ClientMatrix.length; j++ ){
        System.out.println("Client "+j+" :");
        Arrays.sort(ClientMatrix[j]);
        for( int i=ClientMatrix[j].length-1; i>=0 &&  i >= ClientMatrix[j].length-10; i--){
            result[j][i] =  ClientMatrix[j][i]);
        }
    return result;
    }

  7. #7
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2009
    Messages : 112
    Par défaut
    Salut,

    Je ne suis pas sûr de comprendre ton problème, mais le i référence le articleID définit dans ton premier post.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ClientMatrix [clientID][articleID] = prixPayed;

  8. #8
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Juste pour information, 3 manières de triés un tableau :

    ---->trie à bulle, tu parcours le tableau de gauche à droite et tu fais remonter le plus grand nombre à chaque fois. Parcours x fois le tableau, x =taille du tableau

    ---->Un méthode qui consiste à diviser le tableau en 2 puis en 2 puis en 2 ... Quand tu les divises en 2, tu mets d'un coté les plus grand nombres et de l'autre coté les plus petit. Méthode récursive.

    ---->La méthode de la mort, ne marche pas à tous les coup donc à consommer avec modération. tu peux trier en parcourant seulement 3 fois le tableau:

    -1, tu recupère le plus petit et le plus grand nombre qui sont dans le tableau( tab1)
    puis tu crées un autre tableau (tab2) qui à pour taille (plusGrand-PlusPetit)

    -2 tu parcours tab1 et tu incrementes les cases de tab2 à chaque fois qu'il y a une occurence. exemple :
    Si tab1 = 1|1|4|3|1|4 --->trois 1, zero 2, un 3 et deux 4
    alors tab2 = 3|0|1|2

    -3 tu parcours tab2 et tu remets les nombres dans un 3eme tableau en fonction de leurs occurences. exemple :
    Si tab2 = 3|0|1|4 trois 1, zero 2, un 3 et deux 4
    Alors tab3 1|1|1|3|4|4

    Tab3 = Tab1 mais trié

    Pourquoi ne marche pas à tous les coup ? Si dans ton tableau il y a un nombre = 999999999999999 cela implique de créer un tableau tab2 avec 999999999999999 cases... pas la peine d'expliquer le problème plus loin

  9. #9
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut
    Merci Ivelios,
    mais c'est un peu compliqué pour moi, comme je suis débutante

    Citation Envoyé par Ivelios Voir le message
    Juste pour information, 3 manières de triés un tableau :

    ---->trie à bulle, tu parcours le tableau de gauche à droite et tu fais remonter le plus grand nombre à chaque fois. Parcours x fois le tableau, x =taille du tableau

    ---->Un méthode qui consiste à diviser le tableau en 2 puis en 2 puis en 2 ... Quand tu les divises en 2, tu mets d'un coté les plus grand nombres et de l'autre coté les plus petit. Méthode récursive.

    ---->La méthode de la mort, ne marche pas à tous les coup donc à consommer avec modération. tu peux trier en parcourant seulement 3 fois le tableau:

    -1, tu recupère le plus petit et le plus grand nombre qui sont dans le tableau( tab1)
    puis tu crées un autre tableau (tab2) qui à pour taille (plusGrand-PlusPetit)

    -2 tu parcours tab1 et tu incrementes les cases de tab2 à chaque fois qu'il y a une occurence. exemple :
    Si tab1 = 1|1|4|3|1|4 --->trois 1, zero 2, un 3 et deux 4
    alors tab2 = 3|0|1|2

    -3 tu parcours tab2 et tu remets les nombres dans un 3eme tableau en fonction de leurs occurences. exemple :
    Si tab2 = 3|0|1|4 trois 1, zero 2, un 3 et deux 4
    Alors tab3 1|1|1|3|4|4

    Tab3 = Tab1 mais trié

    Pourquoi ne marche pas à tous les coup ? Si dans ton tableau il y a un nombre = 999999999999999 cela implique de créer un tableau tab2 avec 999999999999999 cases... pas la peine d'expliquer le problème plus loin

  10. #10
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    pour le tri à bulle : ici
    Après, pour n'avoir que les 10 premiers il suffit de regarder les 10 premières cases du tableau.

    Au lieu de faire un print, est-ce que je pourrais copier les 10 articles les + chers ainsi que leurs prix dans un autre tableau et le retourner?
    Rien ne te l'empèche

  11. #11
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 698
    Par défaut
    Certes on peut implémenter soi même un tri a bulle mais étant donné que Java fourni déjà Arrays.sort qui est certainement plus efficace qu'un banal bubble-sort, autant l'utiliser.

    L'intérêt du bubble-sort en dehors des cours d'algo/programmation est quasi nul.

    J'ai édité mon code pour qu'il retourne les résultats dans l'ordre décroissant. Bien sur j'ai fait un System.out.println() pour afficher les résultats sur la console, mais on peut faire ce que l'on souhaite à la place.

  12. #12
    Membre éprouvé Avatar de Celeborn
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 133
    Par défaut
    Citation Envoyé par Ivelios Voir le message
    Juste pour information, 3 manières de triés un tableau :
    bien plus que ça !

  13. #13
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Citation Envoyé par Celeborn
    bien plus que ça !
    Oups... je ne connais que trois façon...

  14. #14
    Membre émérite Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    Citation Envoyé par Ivelios Voir le message
    Oups... je ne connais que trois façon...
    Pour ta culture, les algorithmes de tri sont souvent étudiés plus en détail lors de cours sur la complexité.

Discussions similaires

  1. [Tableaux] Tri de tableau à 2 dimensions
    Par heavenvibes dans le forum Langage
    Réponses: 3
    Dernier message: 22/06/2008, 02h53
  2. [Tableaux] Problème de tri de tableau à 2 dimensions
    Par lebigboss dans le forum Langage
    Réponses: 1
    Dernier message: 09/05/2007, 16h34
  3. [Tableaux] Problème tri de tableau à deux dimensions
    Par squall62 dans le forum Langage
    Réponses: 21
    Dernier message: 24/05/2006, 18h18
  4. Tri sur tableau à 2 dimensions
    Par Poussy-Puce dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/03/2006, 19h36
  5. [Tableaux] tri de tableau deux dimensions
    Par oursquetaire dans le forum Langage
    Réponses: 8
    Dernier message: 27/12/2005, 14h27

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