Pagini recente » Cod sursa (job #387343) | Cod sursa (job #318834) | Cod sursa (job #3256105) | Cod sursa (job #2779780) | Cod sursa (job #908490)
Cod sursa(job #908490)
#include <stdio.h>
#define NMAX 500001
void merge_sort (int v[NMAX], int a, int q, int b);
void merge (int v[NMAX], int a, int b)
{
if (a < b)
{
int q;
q = a + (b - a) / 2;
merge (v, a, q);
merge (v, q + 1, b);
merge_sort (v, a, q, b);
}
}
void merge_sort (int v[NMAX], int a, int q, int b)
{
int L[NMAX], R[NMAX], i, j, n1, n2, k;
n1 = q - a + 1;
n2 = b - q;
for (i = 0; i < n1; i++){
L[i] = v[a + i];
}
for (i = 0; i < n2; i++){
R[i] = v[q + i + 1];
}
L[n1] = 1 << 30;
R[n2] = 1 << 30;
i = 0;
j = 0;
for (k = a; k <= b; k++){
if (L[i] <= R[j])
{
v[k] = L[i];
i++;
}
else
{
v[k] = R[j];
j++;
}
}
}
int main ()
{
freopen ("algsort.in", "r", stdin);
freopen ("algsort.out", "w", stdout);
int n, v[NMAX], i;
scanf ("%d", &n);
for (i = 0; i < n; i++)
scanf ("%d", &v[i]);
merge (v, 0, n - 1);
for (i = 0; i < n; i++)
printf ("%d ", v[i]);
printf ("\n");
return 0;
}