Pagini recente » Cod sursa (job #2825865) | Cod sursa (job #1848858) | Cod sursa (job #2443184) | Cod sursa (job #2889705) | Cod sursa (job #645732)
Cod sursa(job #645732)
#include<stdio.h>
int n,a[500001],b[500001];
void citire(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
}
void merge(int i,int i1,int j,int j1){
int k=i,v=0;
while(i<=i1 && j<=j1){
if(a[i]<=a[j]){
b[++v]=a[i];
i++;
}
else{
b[++v]=a[j];
j++;
}
}
while(i<=i1)
b[++v]=a[i++];
while(j<=j1)
b[++v]=a[j++];
for(v=1;v<=(j1-k+1);v++)
a[k+v-1]=b[v];
}
void mergesort(int i,int j){
if(i==(j-1)){
if(a[i]>a[j])
a[i]=a[i]^a[j]^(a[j]=a[i]);
}
if(i<j-1){
int mij=(i+j)/2;
mergesort(i,mij);
mergesort(mij+1,j);
merge(i,mij,mij+1,j);
}
}
int main(){
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
citire();
mergesort(1,n);
for(int i=1;i<=n;i++)
printf("%d ",a[i]);
return 0;
}