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 :

Fusion de deux tableaux triés


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Septembre 2008
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Septembre 2008
    Messages : 104
    Par défaut Fusion de deux tableaux triés
    Bonjour,
    J'ai deux tableaux d'entiers int[] t1={2,4,13,24,25} et int[] t2={26,20,19,11,1}.
    Le premier est trié dans un ordre croissant, et le 2ème dans un ordre décroissant. Je voudrais les fusionner dans un autre tableau qui serait trié dans un ordre croissant. J'ai déjà essayé mais je n'arrive pas, parce que j'ai essayé une méthode où je fais d'abord la fusion, puis le tri du tableau qui en résulte. Mais moi je veux faire les deux traitement en même temps.
    Merci,

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Pourriez vous nous montrer le code de ce que vous avez essayé de faire et qui ne marche pas?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 25
    Par défaut Sans supprimer les doubles
    Un essai qui doit fonctionner (sans supprimer les doubles éventuels et sans chercher à optimiser quoi que ce soit):
    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
     
    	public static void merge( int[] increasing, int[] decreasing, int[] merged )
    	{
    		int leftIndex = 0;
    		int rightIndex = decreasing.length-1;
     
    		int mergedIndex = 0;
    		while ( leftIndex < increasing.length && rightIndex >= 0 )
    		{
    			int leftValue = increasing[leftIndex];
    			int rightValue = decreasing[rightIndex];
    			if ( leftValue <= rightValue )
    			{
    				merged[mergedIndex++] = leftValue;
    				leftIndex++;
    			}
    			else
    			{
    				merged[mergedIndex++] = rightValue;
    				rightIndex--;
    			}
    		}
     
    		if ( leftIndex < increasing.length )
    			System.arraycopy( increasing, leftIndex, merged, mergedIndex, increasing.length-leftIndex );
    		else
    			while ( rightIndex >= 0 )
    				merged[mergedIndex++] = decreasing[rightIndex--];
    	}

  4. #4
    Membre actif
    Inscrit en
    Septembre 2008
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Septembre 2008
    Messages : 104
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Pourriez vous nous montrer le code de ce que vous avez essayé de faire et qui ne marche pas?
    Voilà mon code. Je pense qu'il ne marchera convenablement qui si les 2 tableaux sont triés dans un ordre croissant.
    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
    public static void triTab(){
    		int[] t1 = {2,4,13,24,25};
    		int[] t2 = {26,20,19,11,1};
    		//Arrays.sort(t2);
    		int m=t1.length, n=t2.length;
    		int[] t3 = new int[m+n];
    		int i=0, j=0, k=0;
    		while(i<m && j<n){
    			if(t1[i]<t2[j]){
    				t3[k++]=t1[i++];
    			}
    			else{
    				t3[k++]=t2[j++];
    			}
    		}
    		if(i<m) System.arraycopy(t1, i, t3, k, m-i);
    		if(j<n) System.arraycopy(t2, j, t3, k, n-j);
    		for(int p=0; p<t3.length; p++){
    			System.out.println(t3[p]);
    		}
    	}
    Citation Envoyé par hlbnet Voir le message
    Un essai qui doit fonctionner (sans supprimer les doubles éventuels et sans chercher à optimiser quoi que ce soit)
    Votre code me donne une erreur ArrayIndexOutOfBoundsException

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    vous avez juste a changer vos critère dans votre code. Le deuxième tableau doit être lu de la fin au début. Ca veux dire valeur initiale de l'index = length-1, index-- au lieu de index++ et index>=0 comme condition

  6. #6
    Membre actif
    Inscrit en
    Septembre 2008
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Septembre 2008
    Messages : 104
    Par défaut
    oui j'ai essayé votre solution. Mais ça me donne encore la fameuse erreur ArrayIndexOutOfBoundsException ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(j<n) System.arraycopy(t2, j, t3, k, n-j);
    à savoir que j'utilise ces deux lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(i<m) System.arraycopy(t1, i, t3, k, m-i);
    		if(j<n) System.arraycopy(t2, j, t3, k, n-j);
    pour copier les autre valeurs qui restent.
    Si je les supprime, j'ai le résultat suivant:
    1
    2
    4
    11
    13
    19
    20
    24
    25
    0
    donc la valeur 26 est négligée.
    le problème c'est dans arraycopy, je ne sais pas comment l'utiliser pour copier les valeurs qui restent

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    vous ne pourrez pas utiliser arraycopy sur la fin du tableau, puisque l'ordre n'est pas celui que vous voulez au final

Discussions similaires

  1. Fusion de deux tableaux triés en un tableau trié
    Par adri010 dans le forum Débuter
    Réponses: 8
    Dernier message: 10/06/2010, 19h50
  2. Réponses: 4
    Dernier message: 19/03/2008, 19h49
  3. Fusion de deux tableaux
    Par valefor dans le forum VHDL
    Réponses: 0
    Dernier message: 06/10/2007, 15h59
  4. fusionner deux tableaux triés ?
    Par sami_c dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 08/06/2006, 12h19

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