Cod sursa(job #1009581)

Utilizator andreeaghetuUNIBUC andreeaghetu andreeaghetu Data 13 octombrie 2013 15:32:34
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("algsort.in");
ofstream out ("algsort.out");
int N, v[500000];

void merge (int l1, int m, int l2)
{	
	int i=l1, j=m, k=0, aux[500000];
	while (i<m && j<l2)
	{
		if (v[i]<v[j])
		{
			aux[k]=v[i];
			k++;
			i++;
		}
		else
		{
			aux[k]=v[j];
			k++;
			j++;
		}
	}
	while (i<m)
	{
		aux[k]=v[i];
		k++;
		i++;
	}
	while (j<l2)
	{
		aux[k]=v[j];
		k++;
		j++;
	}
	k=0;
	for (i=l1;i<l2;i++)
	{
		v[i]=aux[k];
		k++;
	}
}

void sort (int a, int b)
{
	if (v[a]>v[b])
	{
		int aux=v[a];
		v[a]=v[b];
		v[b]=aux;
	}
}
	
void ms (int l1, int l2)
{
	int m;
	if ((l2-l1)<=1) 
		sort (l1, l2);
	else
	{
		m=(l1+l2)/2;
		ms (l1, m);
		ms (m, l2);
		merge (l1, m, l2);
	}
}



int main()
{
	int i;
	in>>N;
	for (i=0;i<N;i++)
		in>>v[i];
	ms (0,N-1);
	for (i=0;i<N;i++)
		out<<v[i]<<" ";
}