Cod sursa(job #660419)

Utilizator the_snyper06FMI - ALexandru Mihai the_snyper06 Data 12 ianuarie 2012 23:13:38
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include<cstdio>
#include<algorithm>

using namespace std;
int n;
int v[ 1 << 21 ], gaps[22];

void shell_sort(int *v) {
	int i, j;
	
	for (i = 20, gaps[21] = 1; i >= 0; i--) gaps[i] = gaps[i + 1] * 2 + 1;	
	for (i = 0; i < 22; i++) {
		if (gaps[i] > n) continue;
		for(j = gaps[i]; j < n; j++) {
			int k = j;
			while(k >= gaps[i] && v[k] < v[k - gaps[i]]) {
				swap(v[k], v[k - gaps[i]]);
				k = k - gaps[i];
			}
		}
	}
}

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