Dans un dictionnaire français, "élève" se range juste après "eleve" et bien avant "zèbre" — l'accent ne compte presque pas dans l'ordre alphabétique traditionnel. Mais un tri informatique naïf, qui compare les caractères par leur code Unicode, place souvent les lettres accentuées après tout l'alphabet non accentué, donnant un ordre qui ne correspond pas du tout à celui qu'on apprend à l'école.
Tri alphabétique contre tri numérique
Le tri alphabétique (lexicographique) compare les chaînes caractère par caractère, comme du texte. À cause de cela, la chaîne "10" se retrouve avant "9", car le caractère "1" est lexicographiquement plus petit que "9" — le tri ne « comprend » pas qu'il s'agit de nombres. Le tri numérique, lui, interprète les chaînes comme des nombres avant de les comparer, donnant l'ordre attendu 9, 10, 11.
La casse dans le tri
Dans la plupart des systèmes, les majuscules précèdent lexicographiquement les minuscules (à cause de l'encodage des caractères), donc "Zèbre" peut se retrouver avant "abricot" dans un tri sensible à la casse. Un tri insensible à la casse normalise d'abord les chaînes à une casse commune pour les comparer, tout en conservant la casse d'origine dans le résultat.
Suppression des doublons
La déduplication supprime les lignes répétées en les comparant caractère par caractère, pas par leur sens. Une nuance importante est la sensibilité à la casse et aux espaces, et pour le français, celle des accents : "cafe" et "café" sont deux chaînes techniquement différentes qui ne fusionneront jamais sans normalisation préalable.
À quoi ça sert
- Retirer les entrées répétées d'une liste d'adresses e-mail ou d'URL avant un import.
- Trier une liste de versions ou d'ID numériquement plutôt que comme du texte.
- Comparer rapidement deux jeux de données en ramenant les deux listes à la même forme triée.
Le tri naturel (natural sort)
Le tri naturel est un compromis entre l'approche alphabétique et l'approche numérique : il reconnaît les séquences de chiffres à l'intérieur d'une chaîne comme des nombres, tout en comparant le reste comme du texte. Grâce à cela, file2.txt se retrouve avant file10.txt, alors qu'il s'agit formellement de chaînes et non de nombres autonomes — pratique pour des noms de fichiers ou de versions avec un préfixe textuel.