IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Tri Tableau methode dichotomique


Sujet :

VB 6 et antérieur

  1. #1
    Modérateur
    Avatar de Overcrash
    Homme Profil pro
    Architecte Logiciel et responsable CRM (Salesforce)
    Inscrit en
    Mai 2008
    Messages
    1 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Architecte Logiciel et responsable CRM (Salesforce)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 254
    Points : 1 875
    Points
    1 875
    Par défaut Tri Tableau methode dichotomique
    Bonjour,

    Voila je fais un tri d'un tableau a deux dimensions par méthode dichotomique.
    Ce dernier fonctionne bien sauf que le premier élément du tableau n'est pas trié je ne comprend pas pourquoi.

    Pour info :
    Le tri dichotomique :

    Les explications sont données pour le tri croissant.

    Le principe est simple, on prend l'élément N du tableau, et on le compare aux éléments 1 à N - 1 du même tableau. On en déduit la position M qu'il devrait occupé et on décale tous les éléments M à N - 1 (ex: M prend la position M + 1) puis on place l'élément de dépard à la position M.
    On effectue cette opération pour tous les éléments de 2 jusqu'à Nb_élément.
    Voila le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Sens = True
          coltab = 0
          For Idico = 2 To nbligne
                If (Tabval(Idico, coltab) < Tabval(Idico - 1, coltab) And Sens) Or (Tabval(Idico, coltab) > Tabval(Idico - 1, coltab) And Not Sens) Then
     
                      ' Si l'élément Idico est supérieur à l'élément 1
                      ' alors il faut déterminer sa place
                      ' Sinon l'élément Idico doit prendre la première place
                      If (Tabval(Idico, coltab) > Tabval(1, coltab) And Sens) Or (Tabval(Idico, coltab) < Tabval(1, coltab) And Not Sens) Then
                            Pdico = DichoPlacer(Idico, Tabval(), coltab, Sens)
                      Else
                            Pdico = 1
                      End If
     
                      ' Décalage du tableau
                      Ligne_Tampon = Tabval(Idico, coltab)
                      For Jdico = Idico To Pdico + 1 Step -1
                            Tabval(Jdico, coltab) = Tabval(Jdico - 1, coltab)
                      Next Jdico
                      Tabval(Pdico, coltab) = Ligne_Tampon
                End If
          Next Idico
    La fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Public Function DichoPlacer(Idico As Long, Tabval() As Variant, coltab As Integer, ByVal Sens As Boolean) As Long
     
          ' le paramètre I représente la position de l'élément à classé
          ' le paramètre Tabval() est le tableau à trier, il est modifié puis retourné
          ' le paramètre Sens est vrai pour un tri croissant
          ' DichoPlacer renvoi la nouvelle position de l'élément à classer
     
          Dim inf As Long
          Dim sup As Long
          Dim milieu As Long
     
          inf = 1
          sup = Idico - 1
     
          Do While inf <> sup
                milieu = (inf + sup) \ 2
                If (Tabval(milieu, coltab) <= Tabval(Idico, coltab) And Sens) Or (Tabval(milieu, coltab) >= Tabval(Idico, coltab) And Not Sens) Then
                      inf = milieu + 1
                Else
                      sup = milieu
                End If
          Loop
     
          DichoPlacer = inf
     
    End Function
    Merci de votre aide
    ---
    Overcrash

    Je ne lis pas les codes qui ne sont pas indentés.
    Merci de les messages utiles en cliquant en bas à droite du message

    Bloqué par le firewall pour accéder au chat ? Essayez avec l'adresse en direct : http://87.98.168.209/

  2. #2
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    Bonjour Over,

    Ce dernier fonctionne bien sauf que le premier élément du tableau n'est pas trié je ne comprends pas pourquoi.
    J'ai fait un essai de ton tri (en mettant 10 valeurs) et tout fonctionne bien
    même le premier élément du tableau est bien trié mais en commençant le premier élément du tableau à la valeur d'indice 1,0 (et non 0,0).

    A+

  3. #3
    Modérateur
    Avatar de Overcrash
    Homme Profil pro
    Architecte Logiciel et responsable CRM (Salesforce)
    Inscrit en
    Mai 2008
    Messages
    1 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Architecte Logiciel et responsable CRM (Salesforce)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 254
    Points : 1 875
    Points
    1 875
    Par défaut
    Salut,

    ha? je vais réessayer alors je me suis peut être (surement) planté :s
    je te tiens au courant .

    Over
    ---
    Overcrash

    Je ne lis pas les codes qui ne sont pas indentés.
    Merci de les messages utiles en cliquant en bas à droite du message

    Bloqué par le firewall pour accéder au chat ? Essayez avec l'adresse en direct : http://87.98.168.209/

Discussions similaires

  1. [Tableaux] Tri tableau
    Par licorne dans le forum Langage
    Réponses: 3
    Dernier message: 20/03/2006, 12h14
  2. [POO] Tri tableau objets
    Par Metallic-84s dans le forum Langage
    Réponses: 4
    Dernier message: 21/02/2006, 19h53
  3. algorithme de tri tableau :afficher que les éléments unique
    Par sofiane61 dans le forum Algorithmes et structures de données
    Réponses: 19
    Dernier message: 31/03/2005, 19h50
  4. [Débutant] Tri tableau String
    Par Sigwald dans le forum Collection et Stream
    Réponses: 22
    Dernier message: 14/05/2004, 08h55
  5. [langage] TRI TABLEAU ASSOCIATIF
    Par proner dans le forum Langage
    Réponses: 5
    Dernier message: 04/03/2003, 16h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo