Pagini recente » Cod sursa (job #3181792) | Cod sursa (job #1938461) | Cod sursa (job #218761) | Cod sursa (job #2775863) | Cod sursa (job #1260189)
#include <stdio.h>
#include <stdlib.h>
void merge_sort(int *v, int left, int right)
{
if (right - left < 2) // one elem is already sorted
return;
int middle = (left + right) / 2;
merge_sort(v, left, middle);
merge_sort(v, middle, right);
int i0 = left, i1 = middle, tmp, j;
while(i0 <= middle && i1 < right) {
if (v[i0] <= v[i1]) {
i0++;
} else {
tmp = v[i1];
for (j = i1; j > i0; j--)
v[j] = v[j - 1];
v[i0] = tmp;
i1++;
middle++;
i0++;
}
}
}
int main()
{
int n, v[500001], i;
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
scanf("%d", &n);
for (i = 0; i < n; i++) scanf("%d", &v[i]);
merge_sort(v, 0, n);
for (i = 0; i < n; i++) printf("%d ", v[i]);
printf("\n");
return 0;
}