This is part of the Semicolon&Sons Code Diary - consisting of lessons learned on the job. You're in the algorithms category.
Last Updated: 2024-11-23
I wanted single digit house numbers (e.g. 2, 3) to appear before double digit ones (e.g. 21, 78) in an autocomplete. How should this kind of sorting be done?
Online I saw the following algorithm:
// ascending order
houseNumbers.sort((a, b) => a.length - b.length)
But how does this work?
Imagine the following input:
32 | 415 | 9
The lengths are:
2 | 3 | 1
Taking these pairwise, we have
(32, 415), (32, 9), and (415, 9)
Computing the subtraction of their lengths gives
2 - 3 | 2 - 1 | 3 - 1
-1 | 1 | 2
Connecting this calculation to the pairs (denoted (a,b)
)
a < b
(i.e. "a before b" is ascending order)a > b
(i.e. "b before a" is ascending order)Since ascending order means a < b < c
, from the numbers above we see that:
- 32 comes before 415
- 9 comes before 32
- (rest not necessary...)