Pagini recente » Cod sursa (job #1076712) | Cod sursa (job #2391197) | Cod sursa (job #2093137) | Cod sursa (job #1341834) | Cod sursa (job #1512670)
/* MergeSort */
#include <stdio.h>
#include <assert.h>
#include <string.h>
#define MAXN 500002
int N, A[MAXN], B[MAXN];
void MergeSort(int A[], int B[], int l, int r){
if (r == l)
{
B[l] = A[l];
return;
}
int mid = (l + r) / 2;
MergeSort(A, B, l, mid);
MergeSort(A, B, mid + 1, r);
int i = l, j = mid + 1, k;
for (k = l; k <= r; ++k)
if ( j > r || ( i <= mid && B[i] < B[j]) )
A[k] = B[i++];
else A[k] = B[j++];
memcpy(B + l, A + l, sizeof (int) * (r - l + 1));
}
int main(){
assert(freopen("algsort.in", "r", stdin));
freopen("algsort.out", "w", stdout);
scanf("%d", &N);
int i;
for (i = 0; i < N; ++i) scanf("%d", &A[i]);
MergeSort(A, B, 0, N - 1);
for (i = 0; i < N; ++i) printf("%d ", B[i]);
return 0;
}