Cod sursa(job #1335844)

Utilizator usermeBogdan Cretu userme Data 5 februarie 2015 23:03:55
Problema Radix Sort Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
 #include <cstdio>

int a[10000001];

void shellSortPhase(int n, int gap) {
     for ( int i=gap;i<n;++i) {
         int val=a[i];
         int j;
         for ( j=i-gap;j>=0&&a[j]>val;j-=gap ){
             a[j+gap]=a[j];
         }
         a[j+gap]=val;
     }
 }

 void shellSort(size_t n) {
     static const int gaps[] = {
         	1, 4, 10, 23, 57, 132, 301, 701, 1750, 3905, 8929, 16001, 36289, 64769, 146305, 260609, 587521, 1045505, 2354689, 4188161, 9427969
     };
     for ( int si=sizeof(gaps)/sizeof(gaps[0])-1;si>=0;--si )
         shellSortPhase(n,gaps[si]);
 }

int main(){
    int n;
    scanf("%d",&n);
    for ( int i=0;i<n;++i )
        scanf("%d",&a[i]);
    shellSort(n);
    for ( int i=0;i<n;++i )
        printf("%d ",a[i]);
}