Pagini recente » Cod sursa (job #650760) | Cod sursa (job #2774137) | Cod sursa (job #2810413) | Cod sursa (job #1783680) | Cod sursa (job #650329)
Cod sursa(job #650329)
#include<stdio.h>
int a[400001],n;
void sort(int s,int d, int a[400001]){
int m;
if(a[s]>a[d]) {
m=a[s];
a[s]=a[d];
a[d]=m;
}
}
void interclasare(int s,int d,int m,int a[4000001]) {
int i,j,k=1,b[400001];
i=s,j=m+1;
while(i<=m && j<=d)
if(a[i]<=a[j]) {
b[k++]=a[i];
++i;
}
else {
b[k++]=a[j];
++j;
}
if(i<=m)
for(j=i;j<=m;j++)
b[k++]=a[j];
else
for(i=j;i<=d;i++)
b[k++]=a[i];
k=1;
for(i=s;i<=d;i++)
a[i]=b[k++];
}
void MergeSort(int s,int d, int a[400001]){
int m;
if((d-s)<=1)
sort(s,d,a);
else
{
m=(s+d)/2;
MergeSort(s,m,a);
MergeSort(m+1,d,a);
interclasare(s,d,m,a);
}
}
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 ",&a[i]);
MergeSort(1,n,a);
for(i=1;i<=n;i++)
printf("%d ",a[i]);
return 0;
}