Cod sursa(job #382100)

Utilizator rayvianPricope Razvan rayvian Data 12 ianuarie 2010 20:46:21
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <algorithm>
#include <fstream>
using namespace std;
const int size=500000;
int   v[size];


ifstream f("algsort.in");
ofstream g("algsort.out");
void merge_sort(int start,int end)
{
	if(start==end)
		return ;

	int mijloc=(end+start)/2;

	merge_sort(start,mijloc);
	merge_sort(mijloc+1,end);


	int *vn=new int[end-start+1];

	int p1=start;
	int p2=mijloc+1;
	int
	poz_n=0;

	int cate_c1=0;
	int cate_c2=0;
	while ( (p1<=mijloc) && (p2<=end) )
		if(v[p1]<=v[p2])
		{
			vn[poz_n]=v[p1];
			poz_n++;
			p1++;
			cate_c1++;
		}
		else
		{
			vn[poz_n]=v[p2];
			poz_n++;
			p2++;
			cate_c2++;
		}

	if(cate_c1!=mijloc-start+1)
		for(int i=p1; i<=mijloc; i++)
				vn[poz_n++]=v[i];
	else	if(cate_c2!=end-mijloc)
		for(int i=p2; i<=end; i++)
				vn[poz_n++]=v[i];


	poz_n=0;
	for(int i=start; i<=end; i++)
	{
		v[i]=vn[poz_n];
		poz_n++;
	}

	delete []vn;
}

int main()
{
	int nr_e;
	f>>nr_e;
	for(int i=0; i<nr_e; i++)
		f>>v[i];

	merge_sort(0,nr_e-1);

	copy(&v[0],&v[nr_e],ostream_iterator<int>(g," "));


	return 0;
}