Pagini recente » Cod sursa (job #2245763) | Cod sursa (job #765881) | Cod sursa (job #1253685) | Cod sursa (job #1266353) | Cod sursa (job #1018666)
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int a[500001];
int n;
int L[250001];
int R[250001];
void mergeResults(int first, int middle, int last){
for (int i=first; i<=middle; i++){
L[i-first] = a[i];
}
for (int i=middle+1; i<=last; i++){
R[i-(middle+1)] = a[i];
}
int i = 0;
int iMax = middle-first + 1;
int j = 0;
int jMax = last-middle;
int index = first;
while (i<iMax && j <jMax){
if (L[i] < R[j]){
a[index++] = L[i++];
} else {
a[index++] = R[j++];
}
}
while (i<iMax){
a[index++] = L[i++];
}
while (j<jMax){
a[index++] = R[j++];
}
}
void mergeSort(int first, int last){
if (first < last){
int middle = (first+last)/2;
mergeSort(first, middle);
mergeSort(middle+1, last);
mergeResults(first, middle, last);
}
}
int main()
{
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
scanf("%d", &n);
for (int i=0; i<n; i++){
scanf("%d", &a[i]);
}
mergeSort(0, n-1);
for (int i=0; i<n; i++){
printf("%d ", a[i]);
}
return 0;
}