Haskell, 113 107107 102 92 bytes
import Data.List
a!(b:c)|b<last a=a!c|1>0=a++[b]!c
a!b=a
a#(b:c)|b<a!!0=b:a#c|1>0=(b:a)#c
a#b=b
g x@(b:c)=[b]|i<-[b]!cc=i:g([b]#cx\\i)
g x=[]
This feels really long.
Explanation
!
performs the drop sort on a list, while #
collects the trimmings. g
then repeatedly applies #
until the list is empty recording the results in a list.