Cod sursa(job #1276963)

Utilizator thinkphpAdrian Statescu thinkphp Data 27 noiembrie 2014 00:06:08
Problema Sortare prin comparare Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.14 kb
#include <stdio.h>
#define FIN "algsort.in"
#define FOUT "algsort.out"
#define MAXN 500005

typedef unsigned int uint;

uint arr[ MAXN ],
     n;

//functions prototype
void read();
void shell();
void write();
void swap(int,int);

int main() {

    read();
    shell();
    write();

  return(0);
};

void read() {

     uint i;

     freopen(FIN, "r", stdin);

     scanf("%d", &n); 
 
     for(i = 0; i < n; i++) scanf("%d", &arr[ i ]);

     fclose( stdin );

};

void shell() {

     uint i,

          j, 

          v,

          h = 1; 

     do {

        h = 3 * h + 1;

     } while(h <= n - 1);

     do {

        h /= 3;

        for(i = h + 1; i < n; i++) {

            v = arr[ i ];

            j = i;  

            while( (j >= h) && (arr[ j - h ] > v)) {

                   arr[ j ] = arr[ j - h ];

                   j -= h;
            } 

            arr[ j ] = v;
        }

     } while( h > 1);   
      
 
};

void write() {

     int i;

     freopen(FOUT, "w", stdout); 
 
     for(i = 0; i < n; i++) printf("%d ", arr[ i ]);

     fclose( stdout );
};