S+ȯ†O↔hU¡ofLṁ½S+ȯ†O↔hUmfL¡ṁ½
Takes an array containing a single array. Try it online!Try it online!
Explanation
S+ȯ†O↔hUmfL¡ṁ½ Implicit input, say A = [[4,17,32,1]].
¡ Iterate this function on A:
ṁ½ Split each array in two, concatenate results: [[4,17],[32,1]]
Result is [[[4,17,32,1]],
[[4,17],[32,1]],
[[4],[17],[32],[1]],
[[4],[],[17],[],[32],[],[1],[]],
...
mfL Map filter by length, removing empty arrays.
Result is [[[4,17,32,1]],
[[4,17],[32,1]],
[[4],[17],[32],[1]],
[[4],[17],[32],[1]],
...
U Longest prefix of unique elements:
P = [[[4,17,32,1]],[[4,17],[32,1]],[[4],[17],[32],[1]]]
h Remove last element: [[[4,17,32,1]],[[4,17],[32,1]]]
↔ Reverse: [[[4,17],[32,1]],[[4,17,32,1]]]
†O Sort each inner array: [[[4,17],[1,32]],[[1,4,17,32]]]
S+ȯ Concatenate to P:
[[[4,17,32,1]],
[[4,17],[32,1]],
[[4],[17],[32],[1]],
[[4,17],[1,32]],
[[1,4,17,32]]]
Implicitly print.
The built-in ½ takes an array and splits it at the middle.
If its length is odd, the first part is longer by one element.
A singleton array [a] results in [[a],[]] and an empty array [] gives [[],[]], so it's necessary to remove the empty arrays before applying U.