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

Langage Java Discussion :

trie par fusion en java


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 32
    Points : 30
    Points
    30
    Par défaut trie par fusion en java
    bonjour tout le monde.
    je suis en train d'implémenter l'algorithme de trie par fusion en java, mais j'ai quelque erreurs
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    package trieparfusion;
     
    public class Main {
     
        public static void main(String[] args) {
           int []T={2,7,14,5,9,45};
           int []k=trieFusion(T,0,T.length-1);
    }
        public static int[] trieFusion(int [] T,int debut,int fin)
        {
            if(T.length==1)
                return T;
            else
            {
                int milieu=T.length/2;
                int []T1=trieFusion(T,0,milieu);
                int []T2=trieFusion(T,milieu+1,T.length-1);
                return fusionner(T1,T2);
            }
        }
        public static int[] fusionner(int []T1,int []T2){
            int i=1,j=1,N=T1.length,M=T2.length;
            int []T=new int[M+N];
            while(i+j != M+N+2)
            {
                if (i <= N)
                {
                        if (j <= M)
                        {
                            if(T1[i-1] < T2[j-1])
                            {
                                T[i+j-2]=T1[i-1];
                                i++;
                            }
                            else
                            {
                                T[i+j-2]=T2[j-1];
                                j++;
                            }
                        }
                        else
                        {
                            T[i+j-2]=T1[i-1];
                            i++;
                        }
                }
                else
                {
                    T[i+j-2]=T2[j-1];
                    j++;
                }
            }
            return T;
        }
    }
    merci de m'aider

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Je dirais que le problème est là :

    int []T1=trieFusion(T,0,milieu);

    Tu te rends compte que tu appelles toujours avec le même tableau et que donc la longueur est toujours la même quand tu fais "T.length" ?
    Là tu vas vite avoir un dépassement de capacité. Mais là c'est de l'algorithmique, revoie comment se présente l'algorithme...

  3. #3
    Membre régulier

    Inscrit en
    Septembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2006
    Messages : 74
    Points : 81
    Points
    81
    Par défaut Tri Fusion
    Bonjour,

    En effet comme te l'a expliqué George7 ton problème vient du fait que tu mélange 2 notions:

    1. Soit tu utilise toujours le même tableau et tu travaille à chaque fois sur une partie de celui-ci à l'aide des indices.
    2. Soit tu travaille à chaque fois sur des tableaux différents et là tu peux utiliser la longueur du tableau pour les tests.


    Donc il te faut choisir laquelle des 2 méthodes tu veux utiliser et t'y tenir. Ta méthode de fusion est également incorrecte à cause de ce problème.

    Sinon sur le principe l'algorithme me semble correct ("tri" récursif de chaque moitié de tableau puis fusion des deux moitiés triées).

    Cordialement,

    Mselle

Discussions similaires

  1. [VBA-E] Connaire n° ligne concernées par fusion cellules
    Par aokiseiichiro dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/05/2006, 14h04
  2. Tri par fusion
    Par ousunas dans le forum Langage
    Réponses: 3
    Dernier message: 25/02/2006, 02h52
  3. Trie par ordre croissant.
    Par slackjayo dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 22/04/2005, 09h41
  4. Tri par fusion d'un tableau
    Par Mailgifson dans le forum C
    Réponses: 5
    Dernier message: 12/12/2002, 14h53
  5. Envoi de Datagrames par IP en JAVA
    Par the java lover dans le forum Développement
    Réponses: 2
    Dernier message: 14/08/2002, 11h44

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