// Error a propósito: con el primero como pivote, una entrada ordenada recurre n niveles.
// Uso: deep_recursion n
#include <cstddef>
#include <cstdlib>
#include <iostream>
#include <utility>
#include <vector>

namespace {

void quick_first(std::vector<int>& items, std::size_t lo, std::size_t hi) {
    if (hi - lo < 2) {
        return;
    }
    int pivot = items[lo];
    std::size_t boundary = lo;
    for (std::size_t scan = lo + 1; scan < hi; scan++) {
        if (items[scan] < pivot) {
            boundary++;
            std::swap(items[boundary], items[scan]);
        }
    }
    std::swap(items[lo], items[boundary]);
    quick_first(items, lo, boundary);
    quick_first(items, boundary + 1, hi);
}

}  // namespace

int main(int argc, char** argv) {
    std::size_t n = argc > 1 ? static_cast<std::size_t>(std::atol(argv[1])) : 1000;
    std::vector<int> items(n);
    for (std::size_t i = 0; i < n; i++) {
        items[i] = static_cast<int>(i);
    }
    quick_first(items, 0, n);
    std::cout << "ordenó " << n << " elementos\n";
    return 0;
}
