dim a as integer dim b as integer dim k as long randomize for i = 1 to 1000000 a = Int((1000000 * Rnd) + 1) b = Int((1000000 * Rnd) + 1) k = tableau(a) tableau(a) = tableau(b) tableau(b) = k next i
Private Sub Form_Load() Dim tableau(0 To 1000000) As Long Dim i As Long Dim t0 As Date, t1 As Date, t2 As Date Dim a As Long, b As Long, k As Long ' Remplisage du tableau d'origineFor i 0 To 1000000: tableau(i) i: Next t0 = Time ' Foutage de bordel dans le tableau Randomize Time For i = LBound(tableau) To UBound(tableau) a = Int(((UBound(tableau) - LBound(tableau) + 1) * Rnd) + LBound(tableau)) b = Int(((UBound(tableau) - LBound(tableau) + 1) * Rnd) + LBound(tableau)) k = tableau(a) tableau(a) = tableau(b) tableau(b) = k Next i t1 = Time ' Tri du tableau TriSeparation tableau, LBound(tableau), UBound(tableau) t2 = Time MsgBox "Temps mélange " & Format((t1 - t0), "hh:mm:ss") & vbCrLf & "Temps tri " & Format((t2 - t1), "hh:mm:ss") End Sub ' Ca, ca s'appelle du tri par séparation (si quelqu'un a mieux...) Sub TriSeparation(tbl, deb As Long, fin As Long) Dim a As Long, b As Long, pivot As Long pivot tbl(deb): a deb: b = fin Do While a < b Do While tbl(b) > pivot: b = b - 1: Loop If a <> b Then tbl(a) = tbl(b) tbl(b) = pivot a = a + 1 End If Do While tbl(a) < pivot: a = a + 1: Loop If a <> b Then tbl(b) = tbl(a) tbl(a) = pivot b = b - 1 End If Loop If deb < a - 1 Then TriSeparation tbl, deb, a - 1 If fin > a + 1 Then TriSeparation tbl, a + 1, fin End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionPrivate Sub Form_Load() Dim tableau(0 To 1000000) As Long Dim i As Long Dim t0 As Date, t1 As Date, t2 As Date Dim a As Long, b As Long, k As Long Dim rndTemp As Long ' Remplisage du tableau d'origine For i 0 To 1000000: tableau(i) i: Next t0 = Now ' Foutage de bordel dans le tableau Randomize For i = 0 To 1000000 rndTemp = Int(Rnd * 1000000) k = tableau(i) tableau(i) = tableau(rndTemp) tableau(rndTemp) = k Next i t1 = Now ' Tri du tableau TriSeparation tableau, 0, 1000000 t2 = Now MsgBox "Temps mélange " & Format((t1 - t0), "hh:mm:ss") & vbCrLf & "Temps tri " & Format((t2 - t1), "hh:mm:ss") & vbCrLf & "Temps total = " & Format((t2 - t0), "hh:mm:ss") End Sub ' Ca, ca s'appelle du tri par séparation (si quelqu'un a mieux...) Sub TriSeparation(tbl, deb As Long, fin As Long) Dim a As Long, b As Long, pivot As Long pivot tbl(deb): a deb: b = fin Do While a < b Do While tbl(b) > pivot: b = b - 1: Loop If a <> b Then tbl(a) = tbl(b) tbl(b) = pivot a = a + 1 End If Do While tbl(a) < pivot: a = a + 1: Loop If a <> b Then tbl(b) = tbl(a) tbl(a) = pivot b = b - 1 End If Loop If deb < a - 1 Then TriSeparation tbl, deb, a - 1 If fin > a + 1 Then TriSeparation tbl, a + 1, fin End Sub
Sub TriBulle(Tableau() As Long) Dim i, n, k As Long Dim ok As Boolean n = UBound(Tableau) Do ok = True For i = 1 To n - 1 If (Tableau(i - 1) > Tableau(i)) Then ok = False k = Tableau(i) Tableau(i) = Tableau(i - 1) Tableau(i - 1) = k End If Next i Loop While (Not ok) End Sub Sub TriSelection(Tableau() As Long) Dim i, j, n, k As Long n = UBound(Tableau) For i = 0 To n - 2 For j = i + 1 To n - 1 If (Tableau(j) < Tableau(i)) Then k = Tableau(i) Tableau(i) = Tableau(j) Tableau(j) = k End If Next j Next i End Sub Sub TriInsertion(Tableau() As Long) Dim Pivot, i, n, Val As Long n = UBound(Tableau) For Pivot = 1 To n - 1 i = Pivot - 1 Val = Tableau(Pivot) Do While (i >= 0 And Tableau(i) > Val) Tableau(i + 1) = Tableau(i) i = i - 1 If (i < 0) Then Exit Do Loop Tableau(i + 1) = Val Next Pivot End Sub
n = UBound(Tableau) For i = 0 To Int(n/2) a = Int(n * Rnd) b = Int(n * Rnd) k = tableau(a) tableau(a) = tableau(b) tableau(b) = k Next i