Pagini recente » Cod sursa (job #2148550) | Cod sursa (job #18491) | Cod sursa (job #2488975) | Cod sursa (job #134875) | Cod sursa (job #542159)
Cod sursa(job #542159)
# include <stdio.h>
long a[500010], n, i, v[500010];
void qs (long a[], long st, long dr){
long i = st, j = dr, m = a[(st + dr) >> 1];
do {
while (a[i] < m) ++i;
while (a[j] > m) --j;
if (i <= j){
int x = a[i];
a[i] = a[j];
a[j] = x;
++i;
--j;
}
} while (i <= j);
if (st < j) qs (a, st, j);
if (i < dr) qs (a, i, dr);
}
void merge (long p, long u){
long m, i, j, k;
if (u - p > 0){
m = (u + p) >> 1;
merge (p, m);
merge (m + 1, u);
for (i = p; i <= m; ++i)
v[i] = a[i];
for (j = u; j >= m + 1; --j)
v[m + 1 + u - j] = a[j];
i = p;
j = u;
for (k = p; k <= u; ++k)
a[k] = (v[i] < v[j] ? v[i++] : v[j--]);
}
}
int main (){
freopen ("algsort.in", "r", stdin);
freopen ("algsort.out", "w", stdout);
scanf ("%ld", &n);
for (i = 1; i <= n; ++i)
scanf ("%ld", &a[i]);
merge (1, n);
for (i = 1; i <= n; ++i)
printf ("%ld ", a[i]);
return 0;
}