having a hard time implementing this sorting algo (c++98 cz my school still lives in the past):
void sortVector(vec& vc)
{
if (vc.size() == 1) return;
vec bigs;
vec smls;
for (size_t i = 0; i < vc.size() - 1; i += 2)
{
if (vc[i] > vc[i + 1])
std::swap(vc[i], vc[i + 1]);
bigs.push_back(vc[i + 1]);
smls.push_back(vc[i]);
}
int hasLeftover = vc.size() % 2;
int leftover = hasLeftover ? vc.back() : 0;
sortVector(bigs);
vec S = bigs;
if (smls.size())
{
std::vector<size_t> order = jacobSeq(smls.size());
for (int i = 0; i < (int)smls.size(); ++i)
{
size_t idx = order[i];
vec::iterator pos = std::lower_bound(S.begin(), S.end(), smls[idx]);
S.insert(pos, smls[idx]);
}
}
if (hasLeftover)
{
vec::iterator pos = std::lower_bound(S.begin(), S.end(), leftover);
S.insert(pos, leftover);
}
vc = S;
}
some terminal output, the 5 is missing and 1 is doubled:
➜ ex02 git:(main) ✗ make && ./cursed 3 2 1 4 5 7 6
Before: 3 2 1 4 5 7 6
After : 1 1 2 3 4 6 7
expected: 1 2 3 4 5 6 7

