web-dev-qa-db-fra.com

Pourquoi certaines méthodes de tri trient-elles par 1, 10, 2, 3 ...?

J'ai remarqué que de nombreuses méthodes de tri numérique semblent trier par 1, 10, 2, 3 ... plutôt que les 1, 2, 3, 10 attendus ... J'ai du mal à trouver un scénario où je le ferais J'ai besoin de la première méthode et, en tant qu'utilisateur, je suis frustré chaque fois que je la vois dans la pratique. Existe-t-il des cas d'utilisation légitimes pour le premier style par rapport au second? Si c'est vrai, que sont-ils? Sinon, comment est né le premier style de tri? Quels sont les noms officiels de chaque méthode de tri?

32
VirtuosiMedia

c'est-à-dire lexicographique tri ce qui signifie fondamentalement que la langue traite les variables comme des chaînes et compare caractère par caractère ("200" est supérieur à "19999" parce que '2' est supérieur à '1')

pour résoudre ce problème, vous pouvez

  • s'assurer que les valeurs sont traitées comme des entiers,

  • ajouter au début '0' aux chaînes afin que toutes aient des longueurs égales (viable uniquement lorsque vous connaissez la valeur maximale).
    .

  • ou créez un comparateur personnalisé qui compare d'abord la longueur des chaînes (les chaînes plus courtes étant des entiers plus petits) et quand elles sont égales, comparez le lexicographiquement (faites attention au début '0')

64
ratchet freak

Par ordre alphabétique, 1 précède 2. Chaque fois que vous voyez la première méthode, ce n'est pas parce qu'elle est souhaitable, mais parce que le tri est strictement alphabétique (et se fait de gauche à droite, un caractère à la fois): 1, 2 , 1 est logique pour vous mais pas pour un ordinateur qui ne connaît que la comparaison alphabétique. Il n'y a aucun moyen dans ce genre de comparaison simple de savoir qu'un suivi d'un vient réellement après un deux.

Lorsque vous voyez un tri mixte de Word et de nombres qui traite correctement les nombres, c'est parce que le tri est plus intelligent et, en plus de cela, ne fonctionne généralement qu'au début ou à la fin d'une chaîne.

6
Nicole

D'autres ont des réponses sur ce type, mais personne n'a vraiment répondu à votre question sur la raison pour laquelle vous le voyez. La réponse n'est pas vraiment passionnante. C'est généralement un bug. La plupart des méthodes de tri seront par défaut l'une ou l'autre et la programmation sera probablement insouciante de changer la valeur par défaut lors du tri des nombres.

4
frankc

C'est le résultat lorsque vous triez des chaînes de chiffres par ordre alphabétique plutôt que numérique.

Ce style de tri est le comportement par défaut de la commande unix sort par exemple, sauf si vous utilisez la commande --numeric-sort option de ligne de commande, qui lui indique d'essayer d'interpréter les valeurs numériques.

4
whatsisname