Cod sursa(job #590767)

Utilizator balakraz94abcd efgh balakraz94 Data 19 mai 2011 21:43:43
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#define n_max 500005
using namespace std ;


int a[n_max];
int n;

void interclasare(int,int,int);
void mergesort(int,int);
void citeste();
void afiseaza();

void interclasare (int st, int dr, int mij)
{
	
int b[n_max], i, j, k=0;

for (i=st,j=mij+1;i<=mij && j<=dr;)
{
	if (a[i]<a[j])
		b[k++]=a[i++];
	else
		b[k++]=a[j++];
}

for (;i<=mij;i++)
	b[k++]=a[i];

for (;j<=dr;j++)
	b[k++]=a[j];

for(i=0, j=st; j<=dr && i<k ;i++,j++)
	a[j]=b[i];
}


void mergesort(int st, int dr)
{
	
if (st<dr)
{
	int mij=(st+dr)/2;
    
	mergesort(st,mij);
	mergesort(mij+1,dr);

	interclasare(st,dr,mij);
}
else if(dr-st==1)
{
	if(a[st]>a[dr])
	{
		int aux=a[st];
		a[st]=a[dr];
		a[dr]=aux;
	}
}

}


void citeste()
{
	ifstream fin("algsort.in");
	
	fin>>n;
	
	for(int i=1;i<=n;i++)
		fin>>a[i];
	
	fin.close();
}



void afiseaza()
{
	ofstream fout("algsort.out");
	
	for(int i=1;i<=n;i++)
		fout<<a[i]<<" ";
	
	fout.close();
}



int main ()
{   

citeste();

mergesort (1,n);

afiseaza ();

return 0;
}