No es lo mismo ordenar que ordenar:
La de la izquierda es una ordenación alfabética «natural», como la del explorador de Windows, la de la derecha la típica ordenación «Asciibética» de la mayoría de los lenguajes de programación (por ej. Arrray.Sort() en PHP). Una es para humanos, la otra para máquinas.
Sorting for Humans: Natural Sort Order es un artículo de Coding Horror que explica con más detalle este problema de confusión entre lo que es una ordenación «para humanos» y la ordenación puramente mecánica, lo cual afecta a muchos proyectos por no hablar incluso de de interfaces.
Algunos algoritmos y soluciones de ordenación allí mencionadas:
- The Alphanum Algorithm
- Natural Order String Comparison
- Natural Sorting in C#
- Compact Python Human Sort y su versión internacionalizada
- Natsort() en PHP
- Sensible Sort en Ruby
- Natural Sorting in C#
- strcmp4humans en C
- Human Sort en Perl
- Numeric String Sort en C#
- Unicode collation algorithm
- Schwartzian transform y ejemplos en C
Los últimos enlaces tienen que ver más con los temas sobre «comparación natural de cadenas» y «ordenación internacional» que están colaterlamente relacionados con el de la ordenación en general.