néné06
XLDnaute Accro
Bonjour le Forum,
J'ai, dans le programme en pièce jointe, un tirage aléatoire de n nombres qui sont mémorisés en mem(Nb,0).
Dans un deuxième temps, je rempli le tableau "Tableau(nb)" d'une dimension, avec les éléments du tableau"mem(Nb,0)" qui est à deux dimensions, afin de pouvoir exécuter ma routine Qsort, car je ne connais pas les instructions pour que le tri "QuickSort" fonctionne depuis un tableau à deux dimensions.
Si l'un d'entre vous pouvait me "corriger" ce programme pour exécuter le tri depuis un tableau à deux éléments?
D'avance merci!
René
J'ai, dans le programme en pièce jointe, un tirage aléatoire de n nombres qui sont mémorisés en mem(Nb,0).
Dans un deuxième temps, je rempli le tableau "Tableau(nb)" d'une dimension, avec les éléments du tableau"mem(Nb,0)" qui est à deux dimensions, afin de pouvoir exécuter ma routine Qsort, car je ne connais pas les instructions pour que le tri "QuickSort" fonctionne depuis un tableau à deux dimensions.
Si l'un d'entre vous pouvait me "corriger" ce programme pour exécuter le tri depuis un tableau à deux éléments?
D'avance merci!
René
Code:
Sub QSort(t() As Long, Deb As Long, Fin As Long)
Dim i As Long 'indice
Dim j As Long 'indice
Dim Pivot As Long 'valeur pivot
Dim Temp As Long 'Valeur temporaire
'Algo Tri
i = Deb 'sauve le début
j = Fin 'sauve la fin
Pivot = t((i + j) \ 2) 'valeur pivot
Do
Do While t(i) < Pivot: i = i + 1: Loop 'recherche par la bas
Do While t(j) > Pivot: j = j - 1: Loop 'recherche par le haut
If i <= j Then
Temp = t(i) 'inversion t(i) et t(j)
t(i) = t(j)
t(j) = Temp
i = i + 1 'Passe au suivant
j = j - 1
End If
Loop Until i > j
If j > Deb Then QSort t(), Deb, j 'trie par le bas
If i < Fin Then QSort t(), i, Fin 'trie par le haut
End Sub
Public Sub travail()
Range("A2:Z1000005").ClearContents 'Efface
Dim mem()
Dim t As Long
Nb = Val(InputBox("entrez un nombre de 1 à 1000000"))
z = Nb
ReDim mem(Nb, 1)
ReDim Tableau(Nb) As Long
Application.ScreenUpdating = False
For i = 1 To Nb
mem(i - 1, 1) = i 'mem d'index ou figure les nombres à la suite(1,2,3etc...), que je veux mélanger
Next
z = Nb 'z= pointeur qui va être décrementé
Randomize
For t = 1 To z 'z perd 1 à chaque boucle
s = Int((z * Rnd)) + 1 's= nombre aléatoire entre 1 et z
mem(t - 1, 0) = mem(s - 1, 1) 'les indice des deux memx démare à 0 :valeur en tab "mem1" = valeur trouvée en tab "mem", indice aléa de 1 à z
'******************* Placer variable de mem(x,0) en Tableau(t) ********************
Tableau(t) = mem(t - 1, 0) '******** Ici je place les valeurs de mem(Nb,0) dans Tableau(Nb) ********************
'***************************************************************************************
mem(s - 1, 1) = mem(z - 1, 1) 'la valeur trouvée en "mem" et tranférée en "mem1" devient la derniere valeur z du mem "mem "
z = z - 1 'décrémente z pour tirage aléatoire plus petit ( mem "mem" diminue à chaque boucle
Next
If Nb > 1 Then [a2].Resize(UBound(mem, 1)).Value = mem 'affichage du tableau mem(Nb,0) en colonne A
Application.ScreenUpdating = True
QSort Tableau(), 0, UBound(Tableau) 'Tri Qsort du tableau Tableau(Nb)
End Sub