pb de trie a bulle

pb de trie a bulle - C++ - Programmation

Marsh Posté le 11-08-2003 à 15:38:30    

arraystruct est un tableau de structures :

Code :
  1. stuct mystruct
  2. char id;
  3. vector <char> vect)char;
  4. }


 
chaque vecteur contient une liste de lettres, je veus ordonner ces vecteurs par ordre de ID alphabetique.
 
exemple :
 
struct[0]
vecteur : KFGTREFG
vect ID : E
 
struct[1]
vecteru :POLASDWE
vect ID : L
 
ect..
 
le bubble sort ci sessous ne marche pas a tout les coup ..
pour les ID des vecteurs : M A R K
il va me renvoyer A M K R apres le tri ..
key est un string contenant le mot MARK

Code :
  1. for (int i = 1; i<var; i++)
  2.      {
  3.                 for (int j = 0 ; j < var-i ; j++)
  4.                 {
  5.                           if (key[j] > key[j+1])                                  swap(array_struct[j],array_struct[j+1]);
  6.                          
  7.                  }
  8.      }

   :heink:


Message édité par xiluoc le 11-08-2003 à 15:58:19

---------------
jeunes con de la derniere averse, vieux con des neiges d'antant.
Reply

Marsh Posté le 11-08-2003 à 15:38:30   

Reply

Marsh Posté le 11-08-2003 à 15:47:55    

tu veux bien corriger tes fautes de frappe?
edit: merci :)


Message édité par urd-sama le 11-08-2003 à 15:53:24
Reply

Marsh Posté le 11-08-2003 à 15:50:18    

valeur de var ?


---------------
last.fm
Reply

Marsh Posté le 11-08-2003 à 15:51:39    

theShOcKwAvE a écrit :

valeur de var ?


longueur de key, ici 4


---------------
jeunes con de la derniere averse, vieux con des neiges d'antant.
Reply

Marsh Posté le 11-08-2003 à 15:53:11    

Urd-sama a écrit :

tu veux bien corriger tes fautes de frappe?


ca y est, tu as interet a poster une reponse maintenant  :kaola:


---------------
jeunes con de la derniere averse, vieux con des neiges d'antant.
Reply

Marsh Posté le 11-08-2003 à 15:57:54    

test sur key et swap sur array_struct ... C'est normal, ca ?


---------------
last.fm
Reply

Marsh Posté le 11-08-2003 à 15:58:31    

xiluoc a écrit :


ca y est, tu as interet a poster une reponse maintenant  :kaola:  


 
Sauf que t'as pas corrigé le titre: c "tir à vu" pas "tir a bulle"
 
 [:ddr555]


---------------
Le Tyran
Reply

Marsh Posté le 11-08-2003 à 15:59:21    

xiluoc a écrit :


ca y est, tu as interet a poster une reponse maintenant  :kaola:  


[:486dx]

Reply

Marsh Posté le 11-08-2003 à 16:01:22    

chez moi, ton algo marche en faisant pointer array_struct sur key ... (array_struct en char *) mais je ne sais pas si c'est vraiment ce que tu veux ...


---------------
last.fm
Reply

Marsh Posté le 11-08-2003 à 16:04:51    

theShOcKwAvE a écrit :

test sur key et swap sur array_struct ... C'est normal, ca ?


ben je pense que oui, lorsqu il classe le tableau de structure par ordre d ID alphabetique il bouge toute la structure.
 
exemple
 
 
Struc 0 : 2 elmts : ID 'A' et DATA
Struc 1 : 2 elmts : ID 'M' et DATA
Struc 2 : 2 elmts : ID 'K' et DATA
...
 
'A' < 'M' donc on ne fait rien
'M' > 'K' donc on bouge struct 2 a la place de struct 1 (swap)
 


---------------
jeunes con de la derniere averse, vieux con des neiges d'antant.
Reply

Marsh Posté le 11-08-2003 à 16:04:51   

Reply

Marsh Posté le 11-08-2003 à 16:09:12    

dans ce cas, il faut aussi que tu appliques tes modifs sur key ... Sinon, ton tri à bulles est faux ... Ce serait pas ca, tout bêtement, ton pb ?


---------------
last.fm
Reply

Marsh Posté le 11-08-2003 à 16:11:44    

j'ai dupliqué la caine dans array_struct au lieu de simplement le faire pointer sur la chaine et j'arrive à ton problème, c'est donc que tu dois rajouter un échange des infos dans la chaine ou travailler directement àavec la chaine que tu modifies (cette solution me semble quand même plus propre !)
 
Edit : nom de var :whistle:


Message édité par theshockwave le 11-08-2003 à 16:42:31

---------------
last.fm
Reply

Marsh Posté le 11-08-2003 à 16:12:30    

theShOcKwAvE a écrit :

dans ce cas, il faut aussi que tu appliques tes modifs sur key ... Sinon, ton tri à bulles est faux ... Ce serait pas ca, tout bêtement, ton pb ?


 
mais, ouuuuiiiii  :wahoo:  
parceque la, je tri en fonction des lettres, et je les changes en plein milieu.


---------------
jeunes con de la derniere averse, vieux con des neiges d'antant.
Reply

Marsh Posté le 11-08-2003 à 16:15:34    

c'est nul comme solution. mieux vaut utiliser std::sort

Reply

Marsh Posté le 11-08-2003 à 16:15:45    

Code :
  1. for (int i = 1; i<var; i++)
  2.      {
  3.                 for (int j = 0 ; j < var-i ; j++)
  4.                 {
  5.                           if (key[j] > key[j+1])
  6.                           {
  7.                                    swap(array_struct[j],array_struct[j+1]);
  8.                                    swap (key[j],key[j+1]);
  9.                           }
  10.                  }
  11.      }

 
 :sol:


---------------
jeunes con de la derniere averse, vieux con des neiges d'antant.
Reply

Marsh Posté le 11-08-2003 à 16:16:25    

bof. je suis au taf là, on en reparle plus tard si tu veux

Reply

Marsh Posté le 11-08-2003 à 16:16:44    

Taz a écrit :

c'est nul comme solution. mieux vaut utiliser std::sort


j ai essaye mais j ai pas bien compris les parametres qu il fallait passer dans mon cas.


---------------
jeunes con de la derniere averse, vieux con des neiges d'antant.
Reply

Marsh Posté le 11-08-2003 à 16:17:16    

xiluoc a écrit :


j ai essaye mais j ai pas bien compris les parametres qu il fallait passer dans mon cas.

je te montrerais quand j'aurais le temps

Reply

Marsh Posté le 11-08-2003 à 16:19:35    

Taz a écrit :

je te montrerais quand j'aurais le temps


ok , tks  [:alarmclock119]  
 
 
merci a Shockwave  :hello:  
t as meme pris le temps de tester .


---------------
jeunes con de la derniere averse, vieux con des neiges d'antant.
Reply

Marsh Posté le 11-08-2003 à 16:34:53    

Code :
  1. std::sort(key, key+strlen(key)); // Trie le tab ...


 
il semblerait que ce soit pas dispo dans la STL de microsoft :sarcastic: donc télécharges-en une autre si tu utilises Visual ...
 
pour trier ton tableau de structures, tu devras sans doute passer par un sort du style :

Code :
  1. bool compare(mastruct e1, mastruct e2) {
  2.   // ...
  3. }
  4. // ...
  5. std::sort(array_struct, array_struct + (sizeof(array_struct) /sizeof(int)), compare);


 
 
Si j'ai dit une connerie, Taz me corrigera, je compte sur lui ! :D
 
Edit : plein plein plein d'edits ! :whistle:


Message édité par theshockwave le 11-08-2003 à 16:40:58

---------------
last.fm
Reply

Marsh Posté le 11-08-2003 à 16:44:30    

ouais, c'est bof, mais sur le principe c'est ça

Reply

Marsh Posté le 11-08-2003 à 16:55:36    

Taz a écrit :

ouais, c'est bof, mais sur le principe c'est ça


 
Ben ... Quand tu auras le temps, tu viendras nous expliquer pourquoi c'est bof ! :D Parce que ca ne me parait pas si bof que ca ! Pour que ce soit moins bof, il faudrait faire un "vrai" itérateur ... Style passer par une structure de données plus évoluée qu'un simple tableau et il faudrait implémenter l'opérateur < sur sa structure, non ?
 
 
Edit : j'oublie des mots ! Décidément ! :D


Message édité par theshockwave le 11-08-2003 à 16:56:15

---------------
last.fm
Reply

Marsh Posté le 11-08-2003 à 17:26:26    

on reprend doucement
 
on peut effectivement surcharger operator<, là on montre avec un comparateur: un objet qui est chargé de comparé 2 objets. définir une fonction doit fonctionner, mais autant voir une bien meilleur méthode -> un objet fonction. ça vous permet beaucoup plus de chose, vu que votre objet à aussi un constructeur. vous pourriez donc lui passer un paramètre pour modifier un peu le sens de la comparaison... bref plein de possibilité
 

Code :
  1. class MaStructComparator
  2. {
  3. public:
  4.   bool operator()(const mastruct &e1, const mastruct &e2) const
  5.   {
  6.       // ...
  7.   }
  8. }


 
 
bon apres le tableau C, ça va un moment. si vous passez veaiment par ça, déclarez une constante N. sinon -> vector, etc  
 

Code :
  1. std::sort(array_struct, array_struct + N), MaStructComparator());


 
(notez l'instanciation d'un MaStructComparator)
 
sinon je veux pas voir de strlen ou autre foutaise de char*.
 
OK?

Reply

Marsh Posté le 11-08-2003 à 18:35:31    

Taz a écrit :


Code :
  1. class MaStructComparator
  2. {
  3. public:
  4.   bool operator()(const mastruct &e1, const mastruct &e2) const
  5.   {
  6.       // ...
  7.   }
  8. }




 
L'opérateur te retourne en fait la fonction qui est définie ? Et tu n'as pas besoin de mettre l'opérateur en statique :heink: Ca me surprend un peu ... Je crois que je vais retourner "bouquiner" un peu :D


---------------
last.fm
Reply

Marsh Posté le 12-08-2003 à 05:29:35    


Code :
  1. class MaStructComparator
  2. {
  3. public:
  4.   bool operator()(const mastruct &e1, const mastruct &e2) const
  5.   {
  6.       // ...
  7.   }
  8. }


 :whistle: operator() ca represente quoi ?
et pour ya un const a la fin ?
 
c est possible d avoir le // ... rempli ?  
 

Code :
  1. {
  2.     return (mastruct e1.id <mystruct e2.ID)
  3. }

 
?


---------------
jeunes con de la derniere averse, vieux con des neiges d'antant.
Reply

Marsh Posté le 12-08-2003 à 07:07:51    

operator()
 
ben l'opérateur d'appel, comme pour une fonction
 
Mon objet o;
 
o();
 
 
 
et oui

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed