Tri a bulle en VB

Tri a bulle en VB - VB/VBA/VBS - Programmation

Marsh Posté le 25-11-2005 à 11:33:09    

Salut à tous!!!
 
Je cherche à trier des valeurs par ordre croissant en VB, sachant que plusieurs valeurs peuvent etre identiques.
par exemple, si j'ai 2 5 1 6 3 je dois pbtenir 1 2 3 5 6 (normal),
et si j'ai un chiffre en plusieurs fois, comme ceci :  5 6 5 1 2 je d=veux obtenir 1 2 5 5 6.
C'est possible en VB?
Comment faire?
 
 
Merci.

Reply

Marsh Posté le 25-11-2005 à 11:33:09   

Reply

Marsh Posté le 25-11-2005 à 12:00:37    

Heuuuuuu ya rien de plus simple qu'un tri à bulle et il y en a certainement un million qui sont disponible sur le net via une recherche dans google


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 25-11-2005 à 13:57:57    

trop sympa...

Reply

Marsh Posté le 25-11-2005 à 14:04:25    

Mon code est le suivant :

Code :
  1. Dim contab As String
  2. Dim i As Integer
  3. Dim j As Integer
  4. Dim u As Integer
  5. Dim var1 As Integer
  6. Dim tableau(5) As Integer
  7. Randomize
  8. tableau(1)=Int(Rnd*6)+1
  9. tableau(2)=Int(Rnd*6)+1
  10. tableau(3)=Int(Rnd*6)+1
  11. tableau(4)=Int(Rnd*6)+1
  12. tableau(5)=Int(Rnd*6)+1
  13. For i = 1 To 5
  14.    var1 = tableau(i)
  15.    For u = 1 To (i - 1)
  16.       If tableau(i) <= tableau(u) Then
  17.          j = i - 1
  18.          While j <> u - 1
  19.             tableau(j + 1) = tableau(j)
  20.             j = j - 1
  21.          Wend
  22.       End If
  23.    Next u
  24. Next i
  25. contab = Cstr(tableau(1)) & Cstr(tableau(2)) & Cstr(tableau(3)) & Cstr(tableau(4)) & Cstr(tableau(5))
  26. MsgBox(contab)


 
Mon problème est du au fait que plusieurs cases du tableau peuvent la même valeur.
Ainsi, 2 5 5 2 4 me rend --> 22245 alors que je devrais avoir 22455
ou encore, 1 6 6 2 4 me rend --> 12246 au lieu de 12466
 
Quelqu'un a-t-il une solution???
 
Merci


Message édité par Profil supprimé le 25-11-2005 à 14:14:10
Reply

Marsh Posté le 25-11-2005 à 14:17:09    

Je pense avoir remarqué que cela ne se produit que quand les chiffres identiques sont dans des case cotes a cotes du tableau.
Dans ce cas l'inversion n'est pas effectuée et ca plante...

Reply

Marsh Posté le 25-11-2005 à 14:22:50    

Ca marche dans 75% des cas, mais 25% d'erreur c'est enorme !!!

Reply

Marsh Posté le 25-11-2005 à 14:30:49    

6 3 6 1 5 me renvoie 13156 (c'est meme pas dans l'ordre croissant)

Reply

Marsh Posté le 25-11-2005 à 14:31:56    


Si t'es incapable de faire une recherche dans google, c'est même pas la peine d'essayer d'apprendre à programmer.
 
De plus ton topic ne respecte pas les règles du forum:

Citation :

[0A.1] Certaines questions simples peuveut se résoudre via une simple recherche.  
 
Sur Google : http://www.google.com ou http://groups.google.com.  
N'oubliez pas non plus de consulter la documentation accompagnant votre environnement de développement/compilateur.  
 
[...]
 
[0C] On ne fait pas le boulot à votre place.  
 
Les demandes du style "vous pouvez faire un programme faisant [...] pour moi ?" sont assez mal vues et n'obtiennent que très rarement de réponses.


http://forum.hardware.fr/hardwaref [...] 4-1.htm#t0


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 25-11-2005 à 15:54:12    

Sinon, des gens connaissent-ils la solution à mon problème?

Message cité 1 fois
Message édité par Profil supprimé le 25-11-2005 à 16:43:58
Reply

Marsh Posté le 25-11-2005 à 16:46:11    

S'il vous plait.

Reply

Marsh Posté le 25-11-2005 à 16:46:11   

Reply

Marsh Posté le 25-11-2005 à 17:15:47    


oui, visiblement y en a une paire : http://www.google.fr/search?hl=fr& [...] e+vb&meta=


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 25-11-2005 à 17:21:03    

bonjour,
voilà un algo un peu plus béton :

Code :
  1. Sub Test()
  2. Dim i%, j%, k%, x%, Tablo(5) As Integer
  3. Randomize
  4. For i = 1 To 5
  5.   Tablo(i) = Int(Rnd * 6) + 1
  6. Next
  7. For i = 1 To 5
  8.   j = i
  9.   For k = j + 1 To 5
  10.     If Tablo(k) <= Tablo(j) Then j = k
  11.   Next k
  12.   If i <> j Then
  13.     x = Tablo(j)
  14.     Tablo(j) = Tablo(i)
  15.     Tablo(i) = x
  16.   End If
  17. Next i
  18. MsgBox Tablo(1) & Tablo(2) & Tablo(3) & Tablo(4) & Tablo(5)
  19. End Sub


A+


Message édité par galopin01 le 25-11-2005 à 17:21:34

---------------
roger
Reply

Sujets relatifs:

Leave a Replay

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