Cod sursa(job #629935)

Utilizator vlad.doruIon Vlad-Doru vlad.doru Data 4 noiembrie 2011 11:03:21
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>

using namespace std;

ifstream in("algsort.in");
ofstream out("algsort.out");

const int N=500001;

int n,v[N],aux[N];

void citire(){
	int i;
	in>>n;
	for(i=1;i<=n;i++){
		in>>v[i];
	}
}

void Interclasare(int st,int dr){
	int m=(st+dr)/2;
	int i=st,j=m+1,k=st;
	while(i<=m && j<=dr){
		if(v[i]<v[j]){
			aux[k++]=v[i++];
		}
		else{
			aux[k++]=v[j++];
		}
	}
	while(i<=m){
		aux[k++]=v[i++];
	}
	while(j<=dr){
		aux[k++]=v[j++];
	}
	for(i=st;i<=dr;i++){
		v[i]=aux[i];
	}
}

void MergeSort(int st,int dr){
	if(st==dr)
		return;
	int m=(st+dr)/2;
	MergeSort(st,m);
	MergeSort(m+1,dr);
	Interclasare(st,dr);
}

int main(){
	int i;
	citire();
	MergeSort(1,n);
	for(i=1;i<=n;i++){
		out<<v[i]<<" ";
	}
	return 0;
}