Cod sursa(job #1529076)

Utilizator vapopescuVlad Andrei Popescu vapopescu Data 20 noiembrie 2015 15:08:22
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<iostream>
#include<fstream>
using namespace std;

void interclas(int a, int m, int b, int* v, int* o, int* aux) {
	int i, j, k;
	i = k = a;
	j = m + 1;

	while (i <= m && j <= b) {
		if (v[o[i]] <= v[o[j]])
			aux[k++] = o[i++];
		else
			aux[k++] = o[j++];
	}

	while (i <= m)
		aux[k++] = o[i++];
	while (j <= b)
		aux[k++] = o[j++];

	for (k = a; k <= b; k++)
		o[k] = aux[k];
}

void merge(int a, int b, int* v, int* o, int* aux) {
	if (a == b)
		return;
	int m = (a + b) / 2;

	merge(a, m, v, o, aux);
	merge(m + 1, b, v, o, aux);
	interclas(a, m, b, v, o, aux);
}

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

	int N;
	fin >> N;

	int v[N], o[N], aux[N];

	for (int i = 0; i < N; i++) {
		fin >> v[i];
		o[i] = i;
	}

	merge(0, N - 1, v, o, aux);

	for (int i = 0; i < N; i++)
		fout << v[o[i]] << " ";

	return 0;
}