Algorithme de tri

jp14

XLDnaute Barbatruc
Bonjour et bonne année

Je recherche un algorithme rapide en VBA ( sans utiliser les permutations ) pour trier les membres d'une collection.

JP
 

Hervé

XLDnaute Barbatruc
Re : Algorithme de tri

bonsoir jp et spit

pourquoi sans permutations ?

la seule solution que je vois c'est l'utilisation d'une deuxieme collection, qui serait trié dès son alimentation.

tu initialises la seconde collection avec les éléments de la premiere, et trie en meme temps.

mais bon, ca va faire un peu usine à gaz, non ?

donc, je repose ma question, pourquoi sans permutations ^^ ?

salut
 

jp14

XLDnaute Barbatruc
Re : Algorithme de tri

Bonjour Spitnolan08, Hervé

Merci pour le "quick sort".

Le problème récurrent au tri est le temps de traitement. Lorsqu'on utilise les tris intégrés au système le temps de réponse est insignifiant, ce qui n'est pas le cas d'un tri par permutation ou le temps est proportionnel au nombre de données.

Pour une listview le tri des données est très rapide car on utilise "SortOrder".

Prenons par exemple une base de données avec une colonne qui contient des codes postaux.

Dans un usf on a un "combobox" qui permet de renseigner cette donnée, il faut afficher les codes sans doublons ( en utilisant une collection ) et ensuite il faut trier la liste pour avoir une présentation correcte mais il ne faut pas que le temps de traitement soit trop long.


JP
 

pierrejean

XLDnaute Barbatruc
Re : Algorithme de tri

bonjour jp14:)

Salut Spit :)
Salut Hervé :)

une petite etude sur le tri de collection
il ne s'agit pas tout a fait de permutation et je ne sais pas si c'est plus rapide

jp tu regardes et tu nous dit
 

Pièces jointes

  • tricoll.zip
    12.5 KB · Affichages: 86
  • tricoll.zip
    12.5 KB · Affichages: 85
  • tricoll.zip
    12.5 KB · Affichages: 83

pierrejean

XLDnaute Barbatruc
Re : Algorithme de tri

re

je suis allé un peu plus loin

et le vainqueur est .......




Quick sort

et de très loin

Merci à Spit et Boisgontier
 

Pièces jointes

  • tricoll.zip
    19.5 KB · Affichages: 74
  • tricoll.zip
    19.5 KB · Affichages: 76
  • tricoll.zip
    19.5 KB · Affichages: 76

jp14

XLDnaute Barbatruc
Re : Algorithme de tri

Bonsoir le fil
Salut Pierrejean

Ci joint un fichier avec un usf qui contient des "combobox" et les macros pour afficher dans la combobox des données sans doublons et triées.

La sélection et le tri par permutation est le plus long.
Les deux autres macros sont pratiquement équivalente en temps.

A tester

JP

Pour info sur le Quick sort
Quick sort

Du fait de la réentrance on peut avoir un dépassement au niveau de la pile .
 

Pièces jointes

  • combobox_sansdoublonsiv4.zip
    26.4 KB · Affichages: 69
  • combobox_sansdoublonsiv4.zip
    26.4 KB · Affichages: 67
  • combobox_sansdoublonsiv4.zip
    26.4 KB · Affichages: 73
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Algorithme de tri

bonjour JP :)

Salut Spit :)
Salut Hervé :)

Pour réhabiliter les permutations !!

En fait ,je suis d'abord parti sur l'idée d'utiliser le dictionary plutot que la collection (me souvenant d'un fil de Hervé dont je n'ais pu retrouver la trace dans mon b..)
puis je me suis posé la question de savoir quelle etait la place du tri au sein du probleme posé et la ......surprise !!

le plus clair du temps est passé a traquer les doublons

ma conclusion (toute personnelle)
le tri sur tableau le plus rapide est le Quick Sort (mais surtout sur un tableau mal classé)
la chasse au doublon la plus rapide est la collection

Note pour ceux qui ont Office 2000
l'aide sur Dictionary comporte une erreur
au lieu de:

Dim d 'Crée une variable
Set d = CreateObject(Scripting.Dictionary)
d.Add "a", "Athènes" 'Ajoute des clés et des éléments

il faut

Dim d 'Crée une variable
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athènes" 'Ajoute des clés et des éléments

Meilleurs Voeux a tous
 

Pièces jointes

  • combobox_sansdoublonsiv4.zip
    49.9 KB · Affichages: 45
  • combobox_sansdoublonsiv4.zip
    49.9 KB · Affichages: 45
  • combobox_sansdoublonsiv4.zip
    49.9 KB · Affichages: 43

jp14

XLDnaute Barbatruc
Re : Algorithme de tri

Bonjour le fil

Bonjour Pierrejean

Je suis d'accord avec tes conclusions,
Utilisation d'une "collection" pour éliminer les doublons.
Pour info une autre méthode sur le fil
https://www.excel-downloads.com/threads/vba-remplir-une-combobox-sans-doublon.83545/

Concernant le tri tout va dépendre du type et du nombre de données.

Il est, je pense, préférable d'utiliser une méthode qui simplifie l'affectation des données à la combo par l'utilisation de la propriété list " ComboBox6.List = laliste " ce qui évite une boucle for next.

Jp
 

pierrejean

XLDnaute Barbatruc
Re : Algorithme de tri

bonsoir a tous

Seduit par ta methode pour alimenter une combobox sans doublons ,j'ais testé

nb: en verité je poste surtout pour corriger une erreur dans le tri de combo6

Code:
ReDim laliste(coll.Count - 1)
For n = 1 To coll.Count
 laliste(n - 1) = coll(n)
Next n
 

Pièces jointes

  • combobox_sansdoublonsiv4.zip
    52 KB · Affichages: 50
  • combobox_sansdoublonsiv4.zip
    52 KB · Affichages: 48
  • combobox_sansdoublonsiv4.zip
    52 KB · Affichages: 47

Membres actuellement en ligne

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG