Cod sursa(job #854337)

Utilizator ioanapopaPopa Ioana ioanapopa Data 13 ianuarie 2013 13:04:02
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<iostream>
#include<fstream>
#define N 500000
using namespace std;

int n , a[N];

void interclasare(int s, int d)
{
	int m,x,y,k,c[N];
	
	m = (s+d) / 2;
	x = s;
	y = m+1;
	k = 0;
	
	while(x<=m && y<=d)
	{
		if(a[x] > a[y])
			c[++k] = a[y++];
		else
			c[++k] = a[x++];
	}
	while(x<=m)
        c[++k]=a[x++];
     
    while(y<=d)
        c[++k]=a[y++];
     
	k = 1;
	
    for(x=s;x<=d;x++)
        a[x]=c[k++];
}
		
void mergeSort(int stanga, int dreapta)
{
	if( stanga < dreapta)
	{
		int mijloc = (stanga+dreapta) / 2;
		mergeSort( stanga , mijloc  );
		mergeSort( mijloc+1 , dreapta);
		interclasare( stanga, dreapta );
	}
}

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