This is part of the Semicolon&Sons Code Diary - consisting of lessons learned on the job. You're in the algorithms category.

Last Updated: 2021-05-15

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)`

)

- negative numbers indicate
`a < b`

(i.e. "a before b" is ascending order) - positive numbers indicate
`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...)