Pagini recente » Cod sursa (job #1430271) | Cod sursa (job #1619087) | Betasah | Cod sursa (job #2852738) | Cod sursa (job #382100)
Cod sursa(job #382100)
#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;
}