Pagini recente » Monitorul de evaluare | Cod sursa (job #1762569) | Cod sursa (job #2474987) | Cod sursa (job #2059095) | Cod sursa (job #1335844)
#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]);
}