Cod sursa(job #1294332)

Utilizator deea101Andreea deea101 Data 17 decembrie 2014 12:44:45
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
#include <algorithm>
#define NMAX 500001
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");

int a[NMAX],b[NMAX],N;

void merge(int sir[], int res[], int S, int F)
{
	int mid=S+(F-S)/2+1,piv=mid;
	int k=S-1;
	
	while(S<mid && piv<=F)
	{
		while(sir[S]<=sir[piv] && S<mid)
			res[++k]=sir[S++];
		
		while(sir[piv]<sir[S] && piv<=F)
			res[++k]=sir[piv++];
	}
	
	while(S<mid) res[++k]=sir[S++];
	while(piv<=F) res[++k]=sir[piv++];
	
	for(int i=F-k;i<=F;i++)
		sir[i]=res[i];
}


void mergesort(int sir[],int res[],int S,int F)
{
	int mid;
	mid=S+(F-S)/2;
	
	if(F-S>=1)
	{
		mergesort(sir,res,S,mid);
		mergesort(sir,res,mid+1,F);
		merge(sir,res,S,F);
	}
}

	
int main()
{
	int i;
	f>>N;
	for(i=1;i<=N;i++)
		f>>a[i];
	
	mergesort(a,b,1,N);
	
	for(i=1;i<=N;i++)
		g<<a[i]<<' ';
	
}