Code: Select all
template<typename Buffer>
constexpr Buffer pureSort(const Buffer& buffer)
{
if(!buffer.empty())
{
const auto middle = buffer.front();
auto output = integers(1, buffer.size()) | scan([middle](auto buffer, auto i, auto divider)
{
auto temp = buffer[divider];
auto current = buffer[i];
auto buffer2 = buffer.set(current, temp).set(temp, current);
return select(buffer2, divider + 1).where(buffer[i] < middle).otherwise(buffer, divider);
}, buffer, 0) | select_last();
return pureSort(pureSort(output()));
}
else
{
return buffer();
}
}