Natural sort order
In computing, natural sort order is a way of ordering strings that treats embedded numbers as whole numerical values rather than sequences of characters.
While standard alphabetical order compares strings character-by-character, natural sort order orders them by magnitude of the number, placing "2" before "10".
Natural sort order is designed to address the shortcoming of standard lexicographical order, which often produces counter-intuitive results for humans when dealing with numbered lists, filenames, or version numbers.
| Natural | Lexicographical |
| 1.jpg 2.jpg 3.jpg 9.jpg 10.jpg 11.jpg | 1.jpg 10.jpg 11.jpg 2.jpg 3.jpg 9.jpg |
Problem with standard sorting
In standard alphabetical sorting, strings are compared character by character from left to right. This causes numbers to be sorted based on the value of their first digit, rather than their whole numerical value.For example, a computer using standard sorting will place the string "11" before "2". This occurs because the character "1" has a lower code value than "2". While mathematically correct in terms of character codes, this ordering disrupts the logical sequence expected by users, particularly in file management and data lists.
Operation
Natural sorting algorithms generally operate by splitting strings into "chunks" of text and numbers.- Text chunks are compared alphabetically.
- Numeric chunks are parsed into integer values and compared numerically.
Handling edge cases
Different implementations of natural sort may handle edge cases differently:Leading zeros: Some algorithms treat "01" and "1" as identical, while others may enforce an ordering where "01" follows "1" to ensure a deterministic sort.Whitespace: Most implementations ignore leading or trailing whitespace around the numbers to prevent sorting anomalies.Decimals and Version Numbers: A variation of natural sort, often called version sort, is designed to handle multiple numeric segments separated by dots. In standard sort, precedes ; in version sort, the segments are parsed individually, correctly placing after.History and implementations
Functionality to sort by natural sort order is now widely available in software libraries for many programming languages and operating systems.The concept gained significant visibility in the Macintosh community. During the 1996 MacHack conference, the Natural Order Mac OS System Extension was conceived and implemented overnight as an entry for the Best Hack contest. Subsequently, Dave Koelle published the "Alphanum Algorithm" in 1997, a popular reference implementation that influenced many later libraries. Martin Pool published "Natural Order String Comparison" in 2000.
Modern implementations include:PHP: The function is built into the standard library.Python: The library is a widely used third-party package.Perl: The module is available via CPAN.Unix/Linux: The GNU and commands support natural sorting via the flag or the flag..NET/C#: Various extensions exist, such as.
File managers such as Windows Explorer and Midnight Commander utilize natural sorting by default to display file lists.