Pagini recente » Cod sursa (job #1052866) | Cod sursa (job #2451029) | Cod sursa (job #395728) | Profil EugenStoica | Cod sursa (job #1023549)
#include <iostream>
#include <fstream>
using namespace std;
long v[500001];
long n;
void ordo ( int p, int u )
{
int aux;
if ( v[p] > v[u] )
{
aux = v[p];
v[p] = v[u];
v[u] = aux;
}
}
void inter(int p, int m, int u)
{
int k,i,j;
long a[500001];
k=0; i=p; j=m+1;
while ((i<=m) && (j<=u))
if (v[i] < v[j])
{ k++;
a[k]=v[i];
i++;
}
else
{ k++;
a[k]=v[j];
j++;
}
if (i<=m)
for (j=i;j<=m;j++)
{k++;
a[k]=v[j];
}
else
for (i=j;i<=u;i++)
{k++;
a[k]=v[i];
}
for (i=1;i<=k;i++)
v[p+i-1]=a[i];
}
void merge_sort(int p, int u)
{
int m;
if ((u-p)<=1)
ordo(p,u);
else
{m=((p + u) / 2);
merge_sort(p, m);
merge_sort(m+1, u);
inter(p, m, u);
}
}
int main()
{ int i;
ifstream f("algsort.in");
ofstream g("algsort.out");
f >> n;
for (i=1;i<=n;i++)
f >> v[i];
merge_sort(1,n);
for (i=1;i<=n;i++)
g << v[i] << " ";
f.close();
g.close();
return 0;
}