Tri Rapide

Résolu
bupole Messages postés 13 Statut Membre -  
bupole Messages postés 13 Statut Membre -
Bonjour,
Je suis un étudiant debutant en VB.NET j'ai essayer de réaliser un programme du tri rapide sous VB.NET mais je trouve tout le temps des dificultées en le executant priere de me le corriger j'ai un examen demain et j'ai vraiment besoin de votre aide
et merci d'avance !

Module Module1
    Sub main()
        Dim n As Integer
        Console.Write("Donner la taille du tableau : ")
        n = Console.ReadLine()
        Dim t(n) As Integer
        For i = 1 To n
            Console.Write("tab[" & i & "] = ")
            t(i) = Console.ReadLine()
        Next
        tri_rapide(t, 1, n)
        For i = 1 To n
            Console.WriteLine("tab" & i & "] = " & t(i))
        Next
    End Sub
    'debut tri rapide
    Sub tri_rapide(ByVal tab() As Integer, ByVal debut As Integer, ByVal fin As Integer)
        Dim d, g, pivot, temp As Integer
        d = fin
        g = debut
        pivot = tab((debut + fin) / 2)
        Do
            While (tab(g) < pivot)
                g += 1
            End While
            While (tab(d) > pivot)
                d -= 1
            End While
            If (g <= d) Then
                temp = tab(g)
                tab(g + 1) = tab(d)
                tab(d - 1) = temp
            End If
        Loop While (g <= d)
        If (debut < d) Then
            tri_rapide(tab, debut, d)
        End If
        If (fin > g) Then
            tri_rapide(tab, g, fin)
        End If
    End Sub
    'fin tri rapide
End Module


1 réponse

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour

    code VBa de tri rapide ( je n'en suis pas l'auteur)

    ses explications
    Son principe consiste à trier une partie d'un tableau délimité par 2 indices, on choisit une valeur de ce tableau qui servira de pivot qu'on place de manière définitive de manière à ce que tous les éléments précdents ce pivot lui soient inférieurs ou égaux et que tous les suivants lui soient supérieurs ou égaux. On prend comme pivot la valeur médiane

    vba mais d'après ce que tu as écrit, ca semble identique au vb.net....

      Sub TrieTableau(Deb As Long, Fin As Long)'Ti
    Dim IndiceInf As Long, IndiceSup As Long
    Dim Temp1, Pivot
    IndiceInf = Deb
    IndiceSup = Fin
    Pivot = UCase(T((Deb + Fin) \ 2))
    Do
    While UCase(T(IndiceInf)) < Pivot
    IndiceInf = IndiceInf + 1
    Wend
    While Pivot < UCase(T(IndiceSup))
    IndiceSup = IndiceSup - 1
    Wend
    If IndiceInf <= IndiceSup Then
    Temp1 = T(IndiceInf)
    T(IndiceInf) = T(IndiceSup)
    T(IndiceSup) = Temp1
    IndiceInf = IndiceInf + 1
    IndiceSup = IndiceSup - 1
    End If
    Loop Until IndiceInf > IndiceSup
    If Deb < IndiceSup Then TrieTableau Deb, IndiceSup
    If IndiceInf < Fin Then TrieTableau IndiceInf, Fin
    End Sub


     Michel
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Bonjour

      Merci...

      de rien
      0
      1. bupole Messages postés 13 Statut Membre > michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Merci Michel je suis vrm dsl j'ai pas fait attention
        0