Pagini recente » Cod sursa (job #27396) | Cod sursa (job #2431449) | Cod sursa (job #2814432) | Cod sursa (job #1350956) | Cod sursa (job #1362337)
#include <stdio.h>
#include <stdlib.h>
#define NMAX 50007
int new_v[NMAX];
void merge_sort(int v[], int st, int dr) {
if(st >= dr) return;
int mid = (st + dr) / 2;
merge_sort(v, st, mid);
merge_sort(v, mid + 1, dr);
int i; int k; int j;
for(i = k = st, j = mid + 1; k <= dr ; ) {
if( (v[i] <= v[j] && i <= mid) || j > dr )
new_v[k++] = v[i++];
else if( (v[i] >= v[j] && j <= dr) || i > mid )
new_v[k++] = v[j++];
}
for(i = st; i <= dr; ++i)
v[i] = new_v[i];
//int *new_v = malloc(sizeof(int) * (dr - st + 2));
/*
int ind = 0; int a = st; int b = mid + 1;
while(a != mid + 1 || b != dr + 1) {
if(b == dr + 1) { new_v[++ind] = v[a]; ++a; continue; }
if(a == mid + 1) { new_v[++ind] = v[b]; ++b; continue; }
if(v[a] > v[b] ) {
new_v[++ind] = v[b];
++b;
} else {
new_v[++ind] = v[a];
++a;
}
}
*/
}
int main() {
FILE *in = freopen("algsort.in", "r", stdin);
FILE *out = freopen("algsort.out", "w", stdout);
int N; int v[NMAX];
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]);
printf("\n");
fclose(in); fclose(out);
return 0;
}