Pagini recente » IAP #6: Arhiva educationala | Cod sursa (job #1950659) | Cod sursa (job #228587) | Cod sursa (job #3268407) | Cod sursa (job #1091865)
#include<cstdio>
using namespace std;
const int NMAX = 500005;
int N;
int V[NMAX];
int A[NMAX];
void MergeSort(int L,int R)
{
if(L == R) return;
// Divide...
int M=(L+R)/2;
MergeSort(L,M);
MergeSort(M+1,R);
// ...and conquer!
int i,j,k;
for(i=L; i<=R; i++)
A[i]=V[i];
for(i=L,j=M+1,k=i; i<=M && j<=R; k++)
{
if(A[i]<=A[j]) {V[k]=A[i]; i++;}
else {V[k]=A[j]; j++;}
}
for(; i<=M; i++,k++)
V[k]=A[i];
for(; j<=R; j++,k++)
V[k]=A[j];
}
int main()
{
int i;
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&N);
for(i=1; i<=N; i++)
scanf("%d",&V[i]);
MergeSort(1,N);
for(i=1; i<=N; i++)
printf("%d ",V[i]);
return 0;
}