Arrays and Strings
template<size_t size>
void partition(std::array<int, size> &ar) {
// assuming pivot at end
auto p = ar.end() - 1;
auto i = ar.begin();
auto j = ar.end() - 2;
for (i; i != ar.end() - 1; i++) {
if (i == j) goto FINISH;;
if (*i >= *p && *j < *p) {
iter_swap(i, j);
continue;
}
else if (*i < *p) continue;
else {
// find something smaller
while (*j >= *p) {
j--;
if (i == j) goto FINISH;
}
iter_swap(i, j);
}
}
FINISH:
iter_swap(i, p);
}
int main()
{
std::array<int, 8> ar = { 7,2,1,8,6,3,5,4 };
partition(ar);
print_array(ar);
std::array<int, 17> ar2 = { 7,2,1,8,6,3,5,4,2,1,2,1,1,1,2,2,1 };
partition(ar2);
print_array(ar2);
std::array<int, 11> ar3 = { 7,2,1,8,6,3,5,4,9,2,5 };
partition(ar3);
print_array(ar3);
}Last updated