Cool, as a further research, I think it may be good for GPU/SIMD. Because as a human you quickly see where is the boundary between groups, where to split. But our eyes are parallel to some degree, while computer needs to scan items one-by-one to find the boundary. But GPU is faster may do it in one call.

Glancing at the code it has three nested loops (two "while"s, and one "reverse" call), which makes it O(N^3) before optimizations.