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

avec Java Discussion :

Tri matrice à deux dimensions


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Tri matrice à deux dimensions
    J'ai une matrice de 2 lignes et plusieurs colonnes (plus d'une centaine)

    J'aimerais trier la matrice en fonction des valeurs de la première ligne de telle façon que les valeurs de la deuxième ligne suivent lors des permutations:

    Exemple:

    2 3 5 4 1

    a b c d e

    Après tri:

    1 2 3 4 5

    e a b d c

    Merci!

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 245
    Points : 347
    Points
    347
    Par défaut
    bonjour une solution possible (pas optimisée) doit ressembler à ç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
    15
    16
    17
    18
    19
    20
    21
     
            int[][] matrice={{1,2,3,4,5,6,7,8,9,0},{11,12,13,14,15,16,17,18,19,10}};
     
            for (int i = 0; i < matrice[0].length; i++) {
                for (int j = i+1; j < matrice[0].length; j++) {
                    if(matrice[0][i]>matrice[0][j]){
                        int var=matrice[0][i];
                        matrice[0][i]=matrice[0][j];
                        matrice[0][j]=var;
                        var=matrice[1][i];
                        matrice[1][i]=matrice[1][j];
                        matrice[1][j]=var;
                    }
                }
            }
                    for (int i = 0; i < 2; i++) {
                for (int j = 0; j < matrice[i].length; j++) {
                    System.out.println(matrice[i][j]+" ");
                }
                        System.out.println("");
            }
    l'idée est de faire la meme action à la ligne en dessous que celle d'au dessus. Sinon tu passes par un tableau de Hashtable dont ta clé est l'élément à trier.

    Bon courage

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 156
    Points : 190
    Points
    190
    Par défaut
    Il existe des méthodes de tri plus rapide que celle proposé par tromaltsec, ça méthode nécessite n² opérations, il existe des méthode qui n'en nécessitent que n log n. Pour 100 ou même 1000 éléments à trier ça méthode conviendra. Pour un nombre plus important je te préconise une méthode de tri rapide.

    • soit tu l'implémente
    • soit tu utilise celle fournis par la librairie standard java


    Dans le second cas tu peut utiliser une TreeMap : les éléments y seront trier par leurs clés, ou encore crée ton propre type, que tu tri ensuite. La première méthode est la plus flexible : tu peut toujours réaliser des rajouts, la seconde te fournis directement une liste, et est plus rapide au niveau de l'utilisation des éléments une fois trié.

  4. #4
    Futur Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Pour le moment je suis en moyenne à une centaine d'éléments donc le code de tromaltsec me va parfaitement!! Mais ej prends ta proposition en considération Fmunch

    Merci à vous deux!!

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 156
    Points : 190
    Points
    190
    Par défaut
    Enfin conserver les deux entités séparé me semble vraiment pas terrible, tu n'utilise pas d'objet du tous, le jours où tu aura une colonne supplémentaire, tu pourras à nouveau modifier son code, cela me parait compliqué. Voici un petit code de 45 lignes qui te fait cela proprement ( on pourrait faire plus général que avec des nombres et des chaînes de caractères )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    class Entree implements Comparable<Entree>
    {
      int k;
      String v;
      Entree(int k,String v){
        this.k = k;
        this.v = v;
      }
      int getK() { return k;}
      String getV() { return v;}
      public int compareTo(Entree e2)
      {
        return k-e2.k;
      }
     
      public String toString()
      {
        return "[ "+k+" => "+v+" ]";
      }
      public static Entree[] creerEntrees(int[] arr1, String[] arr2)
      {
        int min = Math.min(arr1.length,arr2.length);
        Entree[] res = new Entree[min];
        for(int i = 0 ; i < min ; i++)
        {
          res[i] = new Entree(arr1[i],arr2[i]);
        }
        return res;
      }
    }
     
    public class TestEntreeSort
    {
      public static void main(String[] args)
      {
        int[] arr1 = {2,3,5,4,1};
        String[] arr2 = {"a","b","c","d","e"};
        Entree[] entrees = Entree.creerEntrees(arr1,arr2);
        System.out.println(java.util.Arrays.toString(entrees));
        java.util.Arrays.sort(entrees);
        System.out.println(java.util.Arrays.toString(entrees));  
      }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Matrice deux dimensions
    Par Student_Master dans le forum C++
    Réponses: 7
    Dernier message: 24/10/2014, 14h01
  2. Tri tableau deux dimensions
    Par charliemtx dans le forum MATLAB
    Réponses: 2
    Dernier message: 19/07/2013, 17h17
  3. Lecture d'une matrice à deux dimensions
    Par nizar_triki dans le forum C
    Réponses: 1
    Dernier message: 05/04/2012, 10h50
  4. [TP] Matrice à deux dimensions
    Par bongo parfait dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 18/03/2007, 23h20
  5. [langage] [debutant] tri tableau deux dimensions
    Par labbyjoel dans le forum Langage
    Réponses: 4
    Dernier message: 07/11/2006, 19h38

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