Trier une liste de nombres étendus, du plus petit au plus grand

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 680 fois - Téléchargée 30 fois

Contenu du snippet

C'est un petit code qui permet de trier une liste de nombre du plus petit au plus grand. Les nombres supportés sont en type EXTENDED, INTEGER étant inclu dans cet ensemble.

La fonction SORT de la classe TStrings est inadaptée, car le tri des nombres ne se fait pas par comparaison ASCII des caractères. Une liste {1,4,10} sera classée {1,10,4} avec Sort et {1,4,10} par ma fonction, présentée ci-dessous.

Pour trier un TListBox par exemple, il faudra taper:
SortNumberedList(MaListeBox.Items);

Source / Exemple :


procedure SortNumberedList(Lst:TStrings);
var i, n : integer;
begin
  if Lst.Count<2 then Exit;
  for i:=1 to Lst.Count-1 do
    for n:=0 to i-1 do
      if StrToFloat(Lst[i])<StrToFloat(Lst[n]) then
        begin
          Lst.Move(i,n);
          Break;
        end;
end;

Conclusion :


Vous pouvez toujours aller voir http://altert.family.free.fr/

A voir également

Ajouter un commentaire

Commentaires

cs_Nono40
Messages postés
962
Date d'inscription
mercredi 3 avril 2002
Statut
Membre
Dernière intervention
12 septembre 2006
1 -
Le break est en trop... si tu le laisses le tri n'est pas correct.

De même la ligne if Lst.Count<2 then Exit; est inutile vu que les boucles ne sont pas exécutées si n<2.
cs_grandvizir
Messages postés
1237
Date d'inscription
samedi 8 novembre 2003
Statut
Membre
Dernière intervention
3 septembre 2006
10 -
Pour le coup du break, je suis pas si sûr car je l'ai mis justement parce que j'avais des problèmes de tri. Si tu as un exemple illustrant cette remarque, ça serait pas mal.

Pour le Exit, c'est a priori acceptable. Je l'avais utilisé histoire d'être sûr que...
cs_Nono40
Messages postés
962
Date d'inscription
mercredi 3 avril 2002
Statut
Membre
Dernière intervention
12 septembre 2006
1 -
Effectivement pour le break ça marche aussi avec. Je n'avais pas vu du premier coupe d'oeil que le tri que tu faisait n'était pas un tri à bulle classique. Mais c'est vrai qu'en faisant ainsi on gagne en vitesse ( enfin pas autant qu'avec un QuickSort )

Comme quoi quand on lit trop vite...
cs_grandvizir
Messages postés
1237
Date d'inscription
samedi 8 novembre 2003
Statut
Membre
Dernière intervention
3 septembre 2006
10 -
Personnellement, je sais pas précisément quelle est le nom de la méthode prise pour trier : ça a été spirituel ;-). L'item X est comparé par rapport à ceux qui le précèdent.

Par ailleurs, j'ai essayé sans le Break, sans le Exit... ça a l'air de marcher. Je précise bien "ça à l'air". Car encore une fois, le Break m'avais semblé très utile.
cs_grandvizir
Messages postés
1237
Date d'inscription
samedi 8 novembre 2003
Statut
Membre
Dernière intervention
3 septembre 2006
10 -
Le Break ne peut qu'accélérer le processus !

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.