Cod sursa(job #1316260)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 13 ianuarie 2015 17:50:34
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <stdio.h>
#include <math.h>

#include <algorithm>

using namespace std;

int n;
int v[520005];
int sol[520005];
int poz[1000];

int main ()
{
	freopen ("algsort.in", "r", stdin);
	freopen ("algsort.out", "w", stdout);
	
	scanf ("%d", &n);
	
	int i, j, lim;
	
	for (i = 1; i <= n; i ++)
		scanf ("%d", &v[i]);
	lim = sqrt (n) + 1;
	
	for (i = n + 1; i <= lim * lim; i ++)
		v[i] = (1 << 31) - 1;
	for (i = 1; i <= n; i += lim)
		sort (v + i, v + i + lim);
	
	for (i = 1; i <= lim; i ++)
		poz[i] = (i - 1) * lim + 1;
	
	for (i = 1; i <= n; i ++)
	{
		int x, ci;
		for (j = 1; j <= lim; j ++)
			if (poz[j] <= j * lim)
			{
				x = v[poz[j]];
				ci = j;
				break;
			}
		for (j = 1; j <= lim; j ++)
			if (poz[j] <= j * lim && v[poz[j]] < x)
			{
				x = v[poz[j]];
				ci = j;
			}
		sol[i] = x;
		poz[ci] ++;
	}
	for (i = 1; i <= n; i ++)
		printf ("%d ", sol[i]);
	return 0;
}