Cod sursa(job #1808045)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 17 noiembrie 2016 11:07:56
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <cstdio>
#include <algorithm>

#define in "algsort.in"
#define out "algsort.out"
#define NMAX (500000 + 7)

using namespace std;
int n, v[NMAX], gap[8] = {512, 256, 128, 64, 32, 16, 4, 1};

void shellSort()
{
    for(int t = 0; t< 8; ++t)
    {
        if(gap[t] > n) continue;
        for(int i = 1; i<= n; ++i)
        {
            int p = i;
            while(p-gap[t] >= 1)
            {
                if(v[p-gap[t]] > v[p])
                {
                    swap(v[p-gap[t]], v[p]);
                    p = p-gap[t];
                }
                else break;
            }
        }
    }
}

int main()
{
    freopen(in, "r", stdin);
    freopen(out, "w", stdout);
    scanf("%d", &n);
    for(int i = 1; i<= n; ++i) scanf("%d", &v[i]);
    shellSort();
    for(int i = 1; i<= n; ++i) printf("%d ", v[i]);
    printf("\n");
    return 0;
}