Récursivité ... VB versus C++

cs_Charlie Messages postés 110 Date d'inscription jeudi 9 mai 2002 Statut Membre Dernière intervention 11 mars 2010 - 22 juil. 2002 à 00:44
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 - 22 juil. 2002 à 17:51
Allo...

Y'a-t-il moyen en VB de développer la récursivité autant qu'en C... J'ai tansposé un algo de trie récursif mais Vb ne l'aime pas trop!!! C'est domage car c'est full performant comme algo.

Voici mon algo!!!

1 form... 1 list et 2 boutons

Private Tableau(4) As Integer

Private Sub Command1_Click()

Dim i As Integer

Tableau(0) = 11
Tableau(1) = 7
Tableau(2) = 5
Tableau(3) = 2
Tableau(4) = 9



For i = 0 To 4
List1.AddItem Tableau(i), i
Next

End Sub

Private Sub Command2_Click()
QuickSort 0, 4

For i = 0 To 4
List1.RemoveItem (i)
List1.AddItem Tableau(i), i
Next

End Sub

Public Function QuickSort(inf As Integer, sup As Integer)

Dim milieu As Integer

If (sup > inf) Then ' s'il y a au moins 2 éléments
milieu = Partition(inf, sup)

'Trie la partie de gauche
QuickSort inf, milieu

'Trie la partie de droite
QuickSort milieu + 1, sup
End If

End Function

Public Function Partition(inf As Integer, sup As Integer) As Integer

Dim Pivot, Tempo
Dim i As Integer, j As Integer

Pivot = Tableau((sup + inf) / 2)
i = inf - 1
j = sup + 1

' tant que les index ne croisent pas

While (i < j)
'Conserver les éléments les plus petits ou égaux au pivot à gauche
Do
i = i + 1
Loop While (Tableau(i) < Pivot)

Do
j = j - 1
Loop While (Tableau(j) > Pivot)

'Permuter les éléments qui n esont pas à leur place

If (i < j) Then
Tempo = Tableau(i)
Tableau(i) = Tableau(j)
Tableau(j) = Tempo
End If
Wend

Partition = j


End Function

3 réponses

cs_processus Messages postés 360 Date d'inscription vendredi 24 août 2001 Statut Membre Dernière intervention 9 juillet 2008 3
22 juil. 2002 à 10:52
T'a un msg d'erreur quelconque ??

==============
Site Web de JDPROG
Présentation de MP3 Index

http://jdprog.fr.st
0
cs_Charlie Messages postés 110 Date d'inscription jeudi 9 mai 2002 Statut Membre Dernière intervention 11 mars 2010 1
22 juil. 2002 à 14:23
J'ai oblié de préciser...

Mon code marche très bien pour les petits tableaux... mais pour un de 100 élément par exemple... Ca plante royalement...

Voici les changements a faire, le reste reste idem...

Private Tableau(100) As Integer

Private Sub Command1_Click()

Dim i As Integer

For i = 0 To 100
tableau(i)=100-i
List1.AddItem Tableau(i), i
Next

End Sub

Private Sub Command2_Click()
QuickSort 0, 100

For i = 0 To 100
List1.RemoveItem (i)
List1.AddItem Tableau(i), i
Next

End Sub
0
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
22 juil. 2002 à 17:51
' Algorithme de tri "shell" sur un tableau Total(Maximum)
Dim i As Integer, j As Integer, k As Integer, l As Integer, Provi As même chose que Total
k = 1
While k <= Maximum
k = k * 2
Wend
Do
k = (k - 1) \ 2
If k = 0 Then Exit Do ' tri terminé
For l = 1 To Maximum - k
i = l
Do
j = i + k
If Total(i) > Total(j) Then Exit Do Provi Total(i): Total(i) Total(j): Total(j) = Provi
i = i - k
Loop While i > 0
Next l
Loop
0
Rejoignez-nous