Haskell, 67 59 58 bytes
(q:r)!x|x<last q=q:r!x|1<2=(q++[x]):r
_!x=[[x]]
foldl(!)[]
Explanation: Given a list of lists (that are already sorted) and a value x
, the !
operator will place x
insideat the end of the first list whose last element is less than or equal to x
. If no such list exists, the list [x]
is placed at the end.