Pagini recente » Cod sursa (job #1629561) | Cod sursa (job #1281458) | Cod sursa (job #2666960) | Cod sursa (job #1337632) | Cod sursa (job #1239398)
#include <stdio.h>
#define Nmax 500005
int v[Nmax], n;
int aux[Nmax];
void read(){
int i;
scanf("%d", &n);
for (i = 1; i <= n; ++i)
scanf("%d", &v[i]);
fclose(stdin);
}
void swap(int *a, int *b){
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;
}
void merge_sort(int l, int r){
if (r == l)
return;
else if (r - l == 1){
if (v[l] > v[r])
swap(&v[l], &v[r]);
return;
} else{
int m = (l + r) / 2;
merge_sort(l, m);
merge_sort(m + 1, r);
int i = l;
int j = m + 1;
int k = l;
for (; i <= m || j <= r;)
if (i > m || (j <= r && v[i] > v[j]))
aux[k++] = v[j++];
else
aux[k++] = v[i++];
for (k = l; k <= r; ++k)
v[k] = aux[k];
}
}
void print(){
int i;
for (i = 1; i <= n; ++i)
printf("%d ", v[i]);
printf("\n");
}
int main(){
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
read();
merge_sort(1, n);
print();
fclose(stdout);
return 0;
}