Sort Target
Algorithm
Speed
Normal ~12s · 38 ms ×4
Glidesort(2023)
▶ Try this Source
O(n log n) ✓ Stable ✗ In-place
🔧 How it works

Scans for natural runs with a strict acceptance threshold (squared length must exceed half the remaining elements), manages runs in three logical states with deferred quicksorting, and schedules merges via a Powersort merge tree.

🎯 Key property

Combines Powersort's near-optimal merge scheduling with stable bidirectional quicksort and branchless sorting networks for small blocks. Deferred quicksort avoids processing unsorted regions until a merge requires it, reducing work on partially structured inputs. The algorithm behind Rust's stable sort.

👁 Watch for
  • Compare the run-detection scan accepts a run only when its squared length exceeds half the remaining input, stricter than Timsort or Powersort
  • RangeCopy before merging, deferred Unsorted blocks are quicksorted in-place via stable bidirectional partitioning; the shorter run is then copied into the auxiliary buffer
  • IndexWrite buffer values are written back as the merge proceeds; branchless Sort4/8/16/32 networks handle small blocks without conditional branches
Initial State
This is the array before sorting. Follow Glidesort step by step.
Main Array
25
0
26
1
27
2
28
3
29
4
30
5
31
6
32
7
24
8
23
9
22
10
21
11
20
12
19
13
18
14
17
15
33
16
34
17
35
18
36
19
37
20
38
21
39
22
40
23
16
24
15
25
14
26
13
27
12
28
11
29
10
30
9
31
41
32
42
33
43
34
44
35
45
36
46
37
47
38
48
39
8
40
7
41
6
42
5
43
4
44
3
45
2
46
1
47
57
48
58
49
59
50
60
51
61
52
62
53
63
54
64
55
56
56
55
57
54
58
53
59
52
60
51
61
50
62
49
63
RunsDetect 0 runs on stack
Waiting for run detection…
0 / 1,274 ops ( 0.0%) 0.0%
Sorting is
a spectacle.
Algorithms at work, in a daily vertical feed. Watch, play, challenge — and go deeper when you're ready.
Loading 0%
An unhandled error has occurred. Reload 🗙