Cod sursa(job #687647)

Utilizator shnakoVlad Schnakovszki shnako Data 22 februarie 2012 17:31:26
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
// ShellSort
#include <stdio.h>
FILE *f=fopen("algsort.in", "r"), *g=fopen("algsort.out", "w");
long a[500001], n;

void citeste(void)
{
	fscanf(f, "%ld", &n);
	for(long i=1;i<=n;i++)
		fscanf(f, "%ld", &a[i]);
	fclose(f);
}

void shellsort (void)
{
    long i, j, k, h, v;
    long cols[] = {1391376, 463792, 198768, 86961, 33936, 13776, 4592, 1968, 861, 336, 112, 48, 21, 7, 3, 1};
    for (k=0; k<16; k++)
    {
        h=cols[k];
        for (i=h; i<n; i++)
        {
            v=a[i];
            j=i;
            while (j>=h && a[j-h]>v)
            {
                a[j]=a[j-h];
                j=j-h;
            }
            a[j]=v;
        }
    }
}	

void tipareste(void)
{
	for(long i=1;i<=n;i++)
		fprintf(g, "%ld ", a[i]);
	fclose(g);
}

int main()
{
citeste();
shellsort();
tipareste();
return 0;
}