Cod sursa(job #1717751)

Utilizator aurasslamMihai Aurelian aurasslam Data 15 iunie 2016 18:09:59
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int N, i, v[500001], w[500001];
void mergesort(int a, int b)
{	
	if(a==b)
		return;
	mergesort(a, (a + b) / 2);
	mergesort((a+b)/2+1, b);
	w[0] = 0;
	for (int p1 = a, p2 = (a + b) / 2 + 1; p1 <= (a + b) / 2 || p2 <= b; ) 
	{
		if (p2 > b || (v[p1] <= v[p2] && p1 <= (a + b) / 2))
		{
			w[++w[0]] = v[p1];
			p1++;
			continue;
		}
		if (p1 > (a + b) / 2 || (v[p1] > v[p2] && p2 <= b))
		{
			w[++w[0]] = v[p2];
			p2++;
		}
	}
	for (int i = 1; i <= w[0]; i++) {
		v[a + i - 1] = w[i];
	}
}
	
int main()
{
	
	freopen("algsort.in", "r", stdin);
	freopen("algsort.out", "w", stdout);
	
	/*for (i = 1; i <= 10; i++) {
		for (int j = 1; j <= 10; j++) {
			//cout << i * j << " ";
			//printf("%4d", i * j);
		}
		cout << endl;
	}*/
	
	cin>>N;
	for(int i=1; i<=N; i++)
		cin>>v[i];
	mergesort(1,N);
	
	for (int i = 1; i <= N; i++) {
		cout << v[i] << " ";
	}
	
	return 0;
}