Pagini recente » Cod sursa (job #2007689) | Cod sursa (job #2540946) | Cod sursa (job #2945652) | Cod sursa (job #1351864) | Cod sursa (job #1762593)
#include<stdio.h>
void merge_sort(int v[],int left,int right)
{
if(right - left <= 0)
return;
else if(right - left == 1 && v[left] > v[right]){
int ax = v[left];
v[left] = v[right];
v[right] = ax;
return;
}
else if(right - left == 1)
return;
int aux[right - left + 5];
int mid = (left + right)/2;
merge_sort(v,left,mid);
merge_sort(v,mid + 1,right);
int i = left,j = mid + 1,sz = 0;
while(i <= mid && j <= right){
if(v[i] <= v[j]){
aux[++sz] = v[i];
++i;
}
else{
aux[++sz] = v[j];
++j;
}
}
while(i <= mid){
aux[++sz] = v[i];
++i;
}
while(j <= right){
aux[++sz] = v[j];
++j;
}
for(int k = 1 ; k <= sz ; ++k)
v[left + k - 1] = aux[k];
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
int n,v[500005];
scanf("%d",&n);
for(int i = 1 ; i <= n ; ++i)
scanf("%d",&v[i]);
merge_sort(v,1,n);
for(int i = 1 ; i <= n ; ++i)
printf("%d ",v[i]);
return 0;
}