Sort Target
Algorithm
Speed
Normal ~12s · 35 ms ×3
ShiftSort(2017)
▶ Try this Source
O(n log n) ✓ Stable ✗ In-place
🔧 How it works

Scans the input to detect both ascending and descending runs, reverses any descending runs in-place to convert them to ascending, then merges all runs using an adaptive strategy similar to Timsort.

🎯 Key property

Symmetric run detection, recognising both forward and backward sequences, doubles the chance of finding a long natural run at any position, making it especially effective on inputs that mix ascending and descending sections.

👁 Watch for
  • Compare adjacent pairs are tested to distinguish ascending runs from descending ones; descending run boundaries are recorded for reversal
  • Swap detected descending runs are reversed in-place by swapping symmetric pairs around the midpoint, converting them to ascending at zero allocation cost
  • RangeCopy after all runs are prepared, adjacent runs are merged using a buffer-based merge step identical to Timsort's
Initial State
This is the array before sorting. Follow ShiftSort 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,026 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 🗙