#pragma once #include namespace gp { template it_t lomuto_partition(it_t first, it_t last, pred predicate = pred{}) { auto i = it_t(first); auto j = first; for(; j != last; ++j) { if(predicate(*j)){ gp::swap(*i, *j); ++i; } } return i; } template it_t hoare_partition(it_t first, it_t last, pred predicate = pred{}) { while(first != last) { while(predicate(*first)) { ++first; if(first == last) return first; } do { --last; if(first == last) return first; } while(!predicate(*last)); swap(*first, *last); ++first; } return first; } /** template it_t partition(it_t first, it_t last, pred predicate = pred{}) { return gp::hoare_partition(first, last, predicate); }**/ }