C++14, 118 108 bytes
Using the algorithm from w0lf's Haskell answer.
As unnamed generic lambda. First parameter is a container of the values to dropsort (like vector<int>
) and second parameter requires a compatible empty container of containers (like vector<vector<int>>
) for the return value via reference.
In the first version of the program, there was R.clear;()
as first statement, so that the container of containers didnt need to be empty.
Peter Cordes thought this could into the specification, so dropping 10 byte for that.
[](auto A,auto&R){for(auto x:A){for(auto&D:R)if(D.back()<x){D.push_back(x);goto F;}R.emplace_back(1,x);F:;}}
Ungolfed:
[](auto A,auto&R){
for(auto x:A){ //foreach item
for(auto&D:R) //foreach result list
if(D.back()<x){ //x bigger than last element
D.push_back(x); //add x
goto F; //break and jump over the emplace
}
R.emplace_back(1,x);//create new list with this element
F:;
}
}