Pagini recente » Cod sursa (job #3201569) | Cod sursa (job #2850164) | Cod sursa (job #2289246) | Cod sursa (job #1531831) | Cod sursa (job #1397614)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
long long int n,a[500001],i;
void merger(int p,int m,int r)
{
int i,j,k=p,b[500001];
for(i=p,j=m+1;i<=m||j<=r;)
{
if(a[i]<a[j]&&i<=m&&j<=r)
{
b[k]=a[i];
k++;
i++;
}
else if(a[i]>a[j]&&i<=m&&j<=r)
{
b[k]=a[j];
k++;
j++;
}
else if(i>m&&j<=r)
{
b[k]=a[j];
j++;
k++;
}
else if(j>r&&i<=m)
{
b[k]=a[i];
i++;
k++;
}
else if(a[i]==a[j])
{
b[k]=a[i];
k++;
b[k]=a[j];
k++;
i++;
j++;
}
}
for(i=p;i<=r;i++)
a[i]=b[i];
};
int mergeSort(int p,int r)
{
int m,i,j;
if(p>=r) return a[r];
else
{
m=(p+r)/2;
mergeSort(p,m);
mergeSort(m+1,r);
merger(p,m,r);
}
};
int main()
{
fin>>n;
for(i=1;i<=n;i++)
fin>>a[i];
mergeSort(1,n);
for(i=1;i<=n;i++)
fout<<a[i]<<" ";
return 0;
}