Cod sursa(job #2401779)

Utilizator S_AndyAndrei S S_Andy Data 10 aprilie 2019 02:15:33
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>

using namespace std;

ifstream fin("algsort.in");
ofstream fout("algsort.out");

int main()
{
	int n, n2, *v, *u, *aux;
	fin >> n;
	n2 = n << 1;
	v = new int[n];
	u = new int[n];
	for (int i = 0; i < n; ++i) {
		fin >> v[i];
	}
	for (int i = 2; i < n2; i <<= 1) {
		for (int j = 0; j < n; j += i) {
			int sx = j + (i >> 1), sy = j + i;
			if (sx > n) {
				sx = n;
			}
			if (sy > n) {
				sy = n;
			}
			for (int k = j, x = j, y = sx; k < sy; ) {
				if (x >= sx) {
					u[k++] = v[y++];
				}
				else if (y >= sy) {
					u[k++] = v[x++];
				}
				else if (v[x] > v[y]) {
					u[k++] = v[y++];
				}
				else {
					u[k++] = v[x++];
				}
			}
		}
		aux = v;
		v = u;
		u = aux;
	}
	for (int i = 0; i < n; ++i) {
		fout << v[i] << " ";
	}
}