Pagini recente » Cod sursa (job #2175159) | Cod sursa (job #1457322)
#include <cstdio>
#include <algorithm>
#define NMAX 500007
FILE *fin, *fout;
using namespace std;
int n, a[NMAX],b[NMAX];
void interclas(int i1,int i2,int i3,int i4)
{
int pos=1,temp=i1;
i2++;
i4++;
while(1)
{
if(i1==i2&&i3==i4) break;
if(i2==i1)
{
b[pos]=a[i3];
i3++;
pos++;
}
else if(i3==i4)
{
b[pos]=a[i1];
i1++;
pos++;
}
else if(a[i1]<a[i3])
{
b[pos]=a[i1];
i1++;
pos++;
}
else if(a[i3]<=a[i1])
{
b[pos]=a[i3];
i3++;
pos++;
}
}
for(int i=temp;i<i4;i++)
{
a[i]=b[i-temp+1];
}
}
void msort(int s,int e)
{
if(e-s+1>=3)
{
int mij=(s+e)/2;
msort(s,mij);
msort(mij+1,e);
interclas(s,mij,mij+1,e);
}
else
{
for(int i=s;i<e;i++)
{
for(int j=i+1;j<=e;j++) if(a[i]>a[j]) swap(a[i],a[j]);
}
}
}
int main()
{
fin = freopen ("algsort.in","r",stdin);
fout = freopen ("algsort.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
msort(1,n);
for(int i=1;i<=n;i++) printf("%d ",a[i]);
fclose(fin);
fclose(fout);
return 0;
}