[LAJ] Tri tableau [TD8]

Voir le sujet précédent Voir le sujet suivant Aller en bas

resolu [LAJ] Tri tableau [TD8]

Message  Aftab007 le Jeu 12 Nov 2009, 17:58

Hellow Smile

Voila dans l' ennoncé du Td8 on nous demande de trier un tableau par ordre croissant , donc du plus ptit au plus grand .

Et Quand je code sa en java mon tableau me fait l' inversse ( decroissant)
D' un coté c'est bien sa repond a l' ennoncé suivant ... mais je comprend pas pourquoi il me renvoi un tableau decroissant.

je vous montre ma logique :

Code:
    public static int[] triDecroissant(int[] tab) {
   int max = 0;
   int dernier;
   int indice;
   for(int i=tab.length-1;i>=0; i--){

       max = maximum(tab);
       indice=indiceMax(tab);

       dernier = tab[i];
       tab[indice]=tab[i];
       tab[i]=max;
   }
            return tab;
    }


Voilà si vous pourriez m' expliquer pourquoi il me sort un tableau décroissant au lieu d' un tableau croissant ?

Peut être que si je comprend pourquoi il me sort un tableau décroissant, je pourrais comprendre comment faire mon tableau trié de façon croissant :p

Merci bien en tous cas Smile


Dernière édition par Aftab007 le Mar 17 Nov 2009, 11:22, édité 1 fois

Aftab007

Nombre de messages : 85
Age : 28
Prénom : Aftab
Date d'inscription : 27/11/2008

Revenir en haut Aller en bas

resolu Re: [LAJ] Tri tableau [TD8]

Message  Trusty le Jeu 12 Nov 2009, 18:31

tu sais mettre le code de tes méthodes


Code:
maximum(tab);
indiceMax(tab);

mais bon en imaginant ce que tu as fais dans ces méthodes, je dirais que tu as fait là même boucle pour afficher

Code:
for(int i=tab.length-1;i>=0; i--)

et donc que tu affiches ton tab à l'envers Suspect non?

Trusty

Nombre de messages : 866
Age : 29
Prénom : Bastien
Statut : old 2010
Localisation : Ath
Date d'inscription : 30/10/2006

Revenir en haut Aller en bas

resolu Re: [LAJ] Tri tableau [TD8]

Message  nvs le Jeu 12 Nov 2009, 18:53

outre les remarques de trusty auxquelles j'adhère, pourquoi utiliser deux méthodes :
Code:
maximum(tab);
indiceMax(tab);
alors que :
Code:
indiceMax(tab);
est suffisant et permet donc d'évacuer une source d'erreur. ton code devient alors :
Code:
public static int[] triDecroissant(int[] tab) {
int max;
//int dernier;    // comm nvs
int indice;
for(int i = tab.length - 1; i >= 0; --i){
      indice = indiceMax(tab);
      max = tab[indice];

      //dernier = tab[i];        // comm nvs
      tab[indice] = tab[i];
      tab[i] = max;
}
return tab;
}
d'autre part, je ne vois pas à quoi sert, dans ton code, la variable :
Code:
dernier







_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

resolu Re: [LAJ] Tri tableau [TD8]

Message  Aftab007 le Jeu 12 Nov 2009, 19:08

Trusty a écrit:tu sais mettre le code de tes méthodes


Code:
maximum(tab);
indiceMax(tab);

mais bon en imaginant ce que tu as fais dans ces méthodes, je dirais que tu as fait là même boucle pour afficher

Code:
for(int i=tab.length-1;i>=0; i--)

et donc que tu affiches ton tab à l'envers Suspect non?
Code:

    public static int maximum(int[] tab){
   int max = 0;
   for(int i=0; i<tab.length; i++){
       if (tab[i]>max ) {
      max = tab[i];
       }
   }
   return max;
    }

[code] public static int indiceMax(int[] tab){
int indice = 0;
int max = 0;
for(int i = 0; i<tab.length;i++){
if (tab[i] > max){
max = tab[i];
indice = i;
}
}
return indice;
} [code]

Bien en faite je retourne a l' envers , mais c parceque je stocke la plus grande valeur ( donc le max ) du tableau a la dernière position.

Aftab007

Nombre de messages : 85
Age : 28
Prénom : Aftab
Date d'inscription : 27/11/2008

Revenir en haut Aller en bas

resolu Re: [LAJ] Tri tableau [TD8]

Message  nvs le Jeu 12 Nov 2009, 20:17

Aftab007 a écrit:Bien en faite je retourne a l' envers , mais c parceque je stocke la plus grande valeur ( donc le max ) du tableau a la dernière position.
d'abord, je ne comprends rien à cette phrase.

ensuite, tu affirmes que ton tri est décroissant à la place d'être croissant. c'est faux. essaie avec d'autres valeurs dans ton tableau pour t'en convaincre. la seule chose que fait ton code, c'est mettre le maximum en première position et garder l'ordre des autres éléments.

quoi qu'il en soit, dans l'algorithme de tri par sélection du maximum, n'oublie pas que la recherche du maximum doit être réalisée dans la partie du tableau qui n'a pas encore été triée, et non dans tout le tableau. à mon avis, il va falloir ajouter un argument à ta méthode
Code:
indiceMax














_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

resolu Re: [LAJ] Tri tableau [TD8]

Message  smb le Jeu 12 Nov 2009, 21:03

nvs a écrit:
Aftab007 a écrit:Bien en faite je retourne a l' envers , mais c parceque je stocke la plus grande valeur ( donc le max ) du tableau a la dernière position.
d'abord, je ne comprends rien à cette phrase.

ensuite, tu affirmes que ton tri est décroissant à la place d'être croissant. c'est faux. essaie avec d'autres valeurs dans ton tableau pour t'en convaincre. la seule chose que fait ton code, c'est mettre le maximum en première position et garder l'ordre des autres éléments.

quoi qu'il en soit, dans l'algorithme de tri par sélection du maximum, n'oublie pas que la recherche du maximum doit être réalisée dans la partie du tableau qui n'a pas encore été triée, et non dans tout le tableau. à mon avis, il va falloir ajouter un argument à ta méthode
Code:
indiceMax


Je confirme !

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

resolu Re: [LAJ] Tri tableau [TD8]

Message  Azgorth le Ven 13 Nov 2009, 02:23

Salut,
Perso j'ai utilisé les méthodes Maximum et indiceMax avec comme paramètres indiceDépart et indiceArrivée que l'on nous à demander de coder juste avant cela,
je n'ai pas rencontré de problèmes pour trier mon tableau en utilisant ces bornes, peut etre devrais tu les intégrés... ca te rendrait la vie plus facile il me semble.

Tant que je suis la, j'aimerai posé une petite question qui me turlupine sur cette méthode.
Voici mon code pour la méthode trier() :
Code:

public static int[] trier(int[] tableau){
        for(int i=0; i<tableau.length-1-i / tableau.length ;i++){
                int maxi= Max(tableau,0,tableau.length-1-i);
                int indiMax= indMax(tableau,0,tableau.length-1-i);
                tableau[indiMax]=tableau[tableau.length-1-i];
                tableau[tableau.length-1-i]= maxi;
                }
        return tableau;
        }

Ce code fonctionne impec, mais j'ai du mal a comprendre pourquoi je suis obligé de divisé par la taille de mon tableau pour qu'il me le trie jusqu'a l'indice 0,
en le divisant par 2, il me le trie jusqu'à l'indice 3 compris... Qlq1 pourrait il m'éclairer sur ce phénomène svp ?
bounce

Azgorth

Nombre de messages : 21
Age : 31
Prénom : Lionel
Statut : Etudiant 1ere Telecom
Localisation : Uccle
Date d'inscription : 25/09/2008

Revenir en haut Aller en bas

resolu Re: [LAJ] Tri tableau [TD8]

Message  Dj x-fuse le Ven 13 Nov 2009, 07:26

De mes souvenirs de logique de première, l'algo de tri par bulle n'est pas aussi "complexe". Pas la peine donc de se briser les neurones avec un "int i=0; i<tableau.length-1-i / tableau.length ;i++"

Comme c'est vendredi 13, voici la logique :
http://paste.pocoo.org/show/zkvcDmV0ec2Wj4rgYFYf/

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

resolu Re: [LAJ] Tri tableau [TD8]

Message  Wark le Ven 13 Nov 2009, 07:49

Dj x-fuse a écrit:De mes souvenirs de logique de première, l'algo de tri par bulle n'est pas aussi "complexe". Pas la peine donc de se briser les neurones avec un "int i=0; i<tableau.length-1-i / tableau.length ;i++"

Comme c'est vendredi 13, voici la logique :
http://paste.pocoo.org/show/zkvcDmV0ec2Wj4rgYFYf/

Tout dépend du type de tri (tri bulle, tri par maximum, tri par minimum, etc..).

Maintenant, il est vrai que l'initialisation de la boucle est bizarre... si tu veux parcourir un tableau de 0 vers n, utilise :

Code:
for(int i=0;i<n;i++);

Pour faire de n vers 0, utilise alors :

Code:
for(int i=n;i>=0;i--);

Toi, tu avances en reculant.. enfin, c'est pas très clair comme code. Smile

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

resolu Re: [LAJ] Tri tableau [TD8]

Message  Trusty le Ven 13 Nov 2009, 09:13

Wark a écrit:

Toi, tu avances en reculant.. enfin, c'est pas très clair comme code. Smile

il recule quoi Smile comment veux-tu que tu l'enc****

Trusty

Nombre de messages : 866
Age : 29
Prénom : Bastien
Statut : old 2010
Localisation : Ath
Date d'inscription : 30/10/2006

Revenir en haut Aller en bas

resolu Re: [LAJ] Tri tableau [TD8]

Message  Aftab007 le Ven 13 Nov 2009, 09:30

nvs a écrit:
Aftab007 a écrit:Bien en faite je retourne a l' envers , mais c parce que je stocke la plus grande valeur ( donc le max ) du tableau a la dernière position.
d'abord, je ne comprends rien à cette phrase.

ensuite, tu affirmes que ton tri est décroissant à la place d'être croissant. c'est faux. essaie avec d'autres valeurs dans ton tableau pour t'en convaincre. la seule chose que fait ton code, c'est mettre le maximum en première position et garder l'ordre des autres éléments.

quoi qu'il en soit, dans l'algorithme de tri par sélection du maximum, n'oublie pas que la recherche du maximum doit être réalisée dans la partie du tableau qui n'a pas encore été triée, et non dans tout le tableau. à mon avis, il va falloir ajouter un argument à ta méthode
Code:
indiceMax

C vrai javais complètement oublier ce détail , en plus je viens de réaliser d' autre test pour le tri et effectivement c'etais le fruit du hasard d'avoir reçu en retour mon tableau décroissant .

J ai recommencer avec des argument pour signaler le début et la fin du tableau ( tous en diminuant la taille du tableau a chaque recherche de l'indice du max)
Mais bon sa ne fait toujours pas ce que je veux, donc va falloir que je continue a bidouiller mon algorithme


Code:

   public static int[] trier(int[] tab) {
      int tmp;
      int indMax;
      for(int i=tab.length-1 ; i>=0 ; i--){

         indMax=indiceMax(tab,i,0);

         tmp = tab[i];
         tab[i] = tab[indMax];
         tab[indMax] = tmp;
      }
      return tab;
   }








<

Aftab007

Nombre de messages : 85
Age : 28
Prénom : Aftab
Date d'inscription : 27/11/2008

Revenir en haut Aller en bas

resolu Re: [LAJ] Tri tableau [TD8]

Message  smb le Ven 13 Nov 2009, 12:10

Aftab007 a écrit:
nvs a écrit:
Aftab007 a écrit:Bien en faite je retourne a l' envers , mais c parce que je stocke la plus grande valeur ( donc le max ) du tableau a la dernière position.
d'abord, je ne comprends rien à cette phrase.

ensuite, tu affirmes que ton tri est décroissant à la place d'être croissant. c'est faux. essaie avec d'autres valeurs dans ton tableau pour t'en convaincre. la seule chose que fait ton code, c'est mettre le maximum en première position et garder l'ordre des autres éléments.

quoi qu'il en soit, dans l'algorithme de tri par sélection du maximum, n'oublie pas que la recherche du maximum doit être réalisée dans la partie du tableau qui n'a pas encore été triée, et non dans tout le tableau. à mon avis, il va falloir ajouter un argument à ta méthode
Code:
indiceMax

C vrai javais complètement oublier ce détail , en plus je viens de réaliser d' autre test pour le tri et effectivement c'etais le fruit du hasard d'avoir reçu en retour mon tableau décroissant .

J ai recommencer avec des argument pour signaler le début et la fin du tableau ( tous en diminuant la taille du tableau a chaque recherche de l'indice du max)
Mais bon sa ne fait toujours pas ce que je veux, donc va falloir que je continue a bidouiller mon algorithme


Code:

   public static int[] trier(int[] tab) {
      int tmp;
      int indMax;
      for(int i=tab.length-1 ; i>=0 ; i--){

         indMax=indiceMax(tab,i,0);

         tmp = tab[i];
         tab[i] = tab[indMax];
         tab[indMax] = tmp;
      }
      return tab;
   }



Peux-tu nous montrer la nouvelle version de indiceMax ?

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

resolu Re: [LAJ] Tri tableau [TD8]

Message  Aftab007 le Ven 13 Nov 2009, 13:11

oui voici donc le code :

Code:
 
   public static int indiceMax(int[] tab, int indiceDepart,int indiceArrivee){
      int indice = 0;
      int max = 0;
      for(int i = indiceDepart; i<indiceArrivee;i++){
         if (tab[i] > max){
            max = tab[i];
            indice = i;
         }
      }
      return indice;
   }

Aftab007

Nombre de messages : 85
Age : 28
Prénom : Aftab
Date d'inscription : 27/11/2008

Revenir en haut Aller en bas

resolu Re: [LAJ] Tri tableau [TD8]

Message  smb le Ven 13 Nov 2009, 13:29

Aftab007 a écrit:oui voici donc le code :

Code:
 
   public static int indiceMax(int[] tab, int indiceDepart,int indiceArrivee){
      int indice = 0;
      int max = 0;
      for(int i = indiceDepart; i<indiceArrivee;i++){
         if (tab[i] > max){
            max = tab[i];
            indice = i;
         }
      }
      return indice;
   }

Il faut donc pour commencer que l'indiceDepart soit < que indiceArrivee

Ton appel dans ta fonction trier est incorrect.
Ecris plutôt :

indMax = indiceMax(tab,0,i) ; /* au lieu de indiceMax(tab,i,0) */

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

resolu Re: [LAJ] Tri tableau [TD8]

Message  Aftab007 le Sam 14 Nov 2009, 12:29

merci , sa à l ' air mieux , mais il ne fait toujours pas ce tri correctement ... bon c pas grave je vais tenter l' exercices suivant quand même et y revenir par la suite.

merci encore à vous tous : )

Aftab007

Nombre de messages : 85
Age : 28
Prénom : Aftab
Date d'inscription : 27/11/2008

Revenir en haut Aller en bas

resolu Re: [LAJ] Tri tableau [TD8]

Message  aro le Sam 14 Nov 2009, 13:44

Aftab007 a écrit:merci , sa à l ' air mieux , mais il ne fait toujours pas ce tri correctement ... bon c pas grave je vais tenter l' exercices suivant quand même et y revenir par la suite.

merci encore à vous tous : )
1. i<=indiceArrivee à la pace de i<indiceArrivee dans ton module indiceMax pour ne pas en oublier un à chaque fois
2. si tu initialises max à 0, le maximum ne sera pas correct s'il n'y a que des nombres négatifs dans le tableau

aro

Nombre de messages : 557
Prénom : Anne
Statut : Prof
Date d'inscription : 06/09/2008

Revenir en haut Aller en bas

resolu Re: [LAJ] Tri tableau [TD8]

Message  Aftab007 le Mar 17 Nov 2009, 11:22

merci , perfecto ^^

sa fait du bien quand sa tourne :p

Aftab007

Nombre de messages : 85
Age : 28
Prénom : Aftab
Date d'inscription : 27/11/2008

Revenir en haut Aller en bas

resolu Re: [LAJ] Tri tableau [TD8]

Message  Contenu sponsorisé Aujourd'hui à 10:57


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum