Le tri rapide

hassni55 Messages postés 31 Date d'inscription dimanche 1 janvier 2006 Statut Membre Dernière intervention 5 mars 2007 - 5 févr. 2006 à 15:46
samsoum0408 Messages postés 2 Date d'inscription mardi 29 juillet 2008 Statut Membre Dernière intervention 30 juillet 2008 - 30 juil. 2008 à 05:36
merci pour tous les personnes qui m'ont aidez, mais je revien aujourd'hui avec un autre probléme :
j'ai un tableau statique TAB(0 to 5)
as Integer

je vaudrais trier ce tableau en ordre croissant, mais en utilisant le Tri rapide.
merciiiiiiiii

8 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
5 févr. 2006 à 15:58
Salut
Il existe plusieurs méthodes de tri.
Il suffit de lire quelques sources que tu trouveras en tapant "méthode tri" puis la recherche par Google.
A toi de faire des essais et de tester la meilleure méthode, mais franchement, avec 6 éléments dans ton tableau, ce n'est pas la peine de te casser la tête à vouloir gagner de la vitesse.
D'autre part, évite sous VB d'utiliser des mots clés du langage pour désigner des variables : TAB n'est pas conseillé (iTab serait bien)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
0
hassni55 Messages postés 31 Date d'inscription dimanche 1 janvier 2006 Statut Membre Dernière intervention 5 mars 2007
5 févr. 2006 à 17:44
j'ai des algorihmes de tri rapide mais pour le transformer en visual basic ce me derange un peu. pour cela je demande d'aide, pas c koi le tri rapide ou comment ca marche mais comme j'entrain de te dire le prblm est en vb
merci pour votre compréhension .
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
5 févr. 2006 à 22:17
Voilà un exemple de tri. (Tri bulle)









Dim iTab(0 To 5) As Integer

Dim Index_Max_du_Tableau As Long

Dim iTemp As Integer

Dim l, j, k As Long



iTab(0) = 15

iTab(1) = 54

iTab(2) = 64

iTab(3) = 12

iTab(4) = 87

iTab(5) = 77



Index_Max_du_Tableau = 5



For l = 0 To Index_Max_du_Tableau - 1

For k = Index_Max_du_Tableau - l To 1 Step -1

If iTab(k - 1) > iTab(k) Then

iTemp = iTab(k)

iTab(k) = iTab(k - 1)

iTab(k - 1) = iTemp

End If

Next k

Next l


Manu
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
5 févr. 2006 à 22:19
Je l'ai réécrit, parce que je me suis rendu compte qu'un L minuscule et
le chiffre 1, ç se ressemble beaucoup en police Courier. Donc là, plus
possible de les confondre :








Dim iTab(0 To 5) As Integer

Dim Index_Max_du_Tableau As Long

Dim iTemp As Integer

Dim ll, k As Long



iTab(0) = 15

iTab(1) = 54

iTab(2) = 64

iTab(3) = 12

iTab(4) = 87

iTab(5) = 77



Index_Max_du_Tableau = 5



For ll = 0 To Index_Max_du_Tableau - 1

For k = Index_Max_du_Tableau - ll To 1 Step -1

If iTab(k - 1) > iTab(k) Then

iTemp = iTab(k)

iTab(k) = iTab(k - 1)

iTab(k - 1) = iTemp

End If

Next k

Next ll

Manu
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
5 févr. 2006 à 23:48
Voilà un exemple de tri rapide









' le paramètre Debut correspond au numéro du premier élément à trier

' le paramètre Fin correspond au numéro du dernier élément à trier

' le paramètre Tableau() est le tableau à trier

Sub TriRapide(Debut As Long, Fin As Long, Tableau As Variant)

Dim i As Long

Dim J As Long

Dim Ligne_Milieu As Variant

Dim Ligne_Tampon As Variant



i = Debut

J = Fin

Ligne_Milieu = Tableau((Debut + Fin) \ 2)

Do

While Ligne_Milieu > Tableau(i)

i = i + 1

Wend

While Ligne_Milieu < Tableau(J)

J = J - 1

Wend



If i <= J Then

Ligne_Tampon = Tableau(i)

Tableau(i) = Tableau(J)

Tableau(J) = Ligne_Tampon

i = i + 1

J = J - 1

End If

Loop Until i > J



If Debut < J Then

TriRapide Debut, J, Tableau

End If

If i < Fin Then

TriRapide i, Fin, Tableau

End If



End Sub

Daniel
0
hassni55 Messages postés 31 Date d'inscription dimanche 1 janvier 2006 Statut Membre Dernière intervention 5 mars 2007
6 févr. 2006 à 15:45
merci, pour votre aide, mais encore le probléme est de remplacer a procédure Tri rapide par autres instructions (j'aime pas l'utiliser sous forme d'une procédure ) parceque j'ai pas encore attaqué les fonctions et les procédures, j'ai essayé avec ces instructions :

Private sub Command1_Click( )
' partionner le tableau selon un pivot
pivot = t(0)
PosPivot = 0
for i = lbound(t)+1 to Ubound(t)
if t(i) < pivot then
PosPivot = PosPivot +1
tmp = t(i)
t(PosPivot) = tmp
end if
Next i
' Placer le pivot a sa place finale
tmp = t(PosPivot)
t(PosPivot) = Pivot
t(0) = tmp
' trier les 2 sous tableaux crées
içi le probléme la pluspart des prog utilisant des procédures comme suit :
TriRapide D,i-2,t

SVP est ce que quelqun peut me dire ce qu'il faut écrire dans cette dérniere partie.
Merci
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
6 févr. 2006 à 17:30
pour le récurssif il faut obligatoirement une procédure.

celui ci est un peu moins rapide que le QuickSort, mais il n'est pas récursif et tu peux l'utiliser où tu veux.

il suffit d'avoir défini Nb_Element, et le Tableau() qui n'est obligé d'être variant.





Sub Tri_Shell_Metzner(ByVal Nb_Element As Long, Tableau As Variant)

Dim Ecart As Long

Dim I As Long

Dim J As Long

Dim Permut As Boolean

Dim Ligne_Tampon As Variant



Ecart = Nb_Element \ 2

Do While Ecart <> 0

For I = 1 To Nb_Element - Ecart

J = I

Permut = True

Do While J > 0 And Permut

Permut = False

If Tableau(J) > Tableau(J + Ecart) Then

Ligne_Tampon = Tableau(J)


Tableau(J) = Tableau(J + Ecart)


Tableau(J + Ecart) = Ligne_Tampon

Permut = True

J = J - Ecart

End If

Loop

Next I

Ecart = Ecart \ 2

Loop

End Sub

Daniel
0
samsoum0408 Messages postés 2 Date d'inscription mardi 29 juillet 2008 Statut Membre Dernière intervention 30 juillet 2008
30 juil. 2008 à 05:36
tres bien
bravo
felicitation
0
Rejoignez-nous