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