Pagini recente » Cod sursa (job #2340971) | Cod sursa (job #2112874) | Cod sursa (job #2104230) | Cod sursa (job #2753477) | Cod sursa (job #2000690)
#include <iostream>
#include <stdio.h>
using namespace std;
int a[500000], n;
void citire()
{
scanf("%d \n", &n);
for(int i=1; i<=n; i++)
scanf("%d ", &a[i]);
}
void interclasare(int s, int d, int m)
{
int i, j, k, n1, n2;
i=j=1;
n1=m-s+1;
n2=d-m;
int v1[n1], v2[n2];
for(k=0; k<n1; k++) v1[k+1]=a[s+k];
for(k=0; k<n2; k++) v2[k+1]=a[m+1+k];
k=s-1;
while(i<=n1 && j<=n2)
{
k++;
if(v1[i]<=v2[j])
{
a[k]=v1[i];
i++;
}
else
{
a[k]=v2[j];
j++;
}
}
while(i<=n1)
{
k++;
a[k]=v1[i];
i++;
}
while(j<=n2)
{
k++;
a[k]=v2[j];
j++;
}
}
void msort(int s, int d)
{
int m;
if(s<d)
{
m=(s+d)/2;
msort(s,m);
msort(m+1,d);
interclasare(s,d,m);
}
}
void afis()
{
for(int i=1; i<=n; i++)
printf("%d ", a[i]);
}
int main()
{
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
citire();
msort(1,n);
afis();
return 0;
}