Cod sursa(job #3291486)

Utilizator and_Turcu Andrei and_ Data 4 aprilie 2025 20:24:32
Problema Sortare prin comparare Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include<bits/stdc++.h>



std::vector<int> generateSedgewickGaps(int max_size)
{
    std::vector<int> ans;

    for (int i = 0; 1; i++)
    {
        int gap;
        if ((i & 1))
            gap = 8 * (1 << i) - 6 * (1 << ((i + 1) / 2)) + 1;
        else
            gap = 9 * (1 << i) - 9 * (1 << (i / 2)) + 1;

        if (gap >= max_size)
            break;
        ans.push_back(gap);
    }

    int size = ans.size();
    for(int i=0;i<size;i++)
        std::swap( ans[0],ans[size-1-i] );

    return ans;
}

void shellsort(std::vector<int>& v)
{
    int size = v.size(), j;
    std::vector<int> gaps = generateSedgewickGaps(size);

    for (auto gap : gaps)
    {
        for (int i = gap; i < size; i++)
        {
            int aux = v[i];
            for (j = i; j >= gap and v[j - gap] > aux; j -= gap)
                v[j] = v[j - gap];
            v[j] = aux;
        }
    }
}



int main()
{
    int n;
    std::vector<int> a;
   
    std::ifstream fin("algsort.in");
    std::ofstream fout("algsort.out");

    fin >> n;
    for(int i=1;i<=n;i++)
    {
        int x;
        fin >> x;
        a.push_back(x);
    }

    shellsort(a);

    for(auto x:a)
        fout << x << " ";

    return 0;
}