Pagini recente » Cod sursa (job #904421) | Cod sursa (job #65411) | Cod sursa (job #2459502) | Cod sursa (job #2749274) | Cod sursa (job #1426994)
#include <fstream>
#define MaxN 500005
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int N, v[MaxN], aux[MaxN];
void merge(int, int);
void mergesort(int start, int end) {
if (start < end) {
int middle = start + (end - start) / 2;
mergesort(start, middle);
mergesort(middle + 1, end);
merge(start, end);
}
}
void merge(int start, int end) {
int middle = start + (end - start) / 2;
int i = start, j = middle + 1, k = 0;
while (i <= middle && j <= end) {
if (v[i] < v[j]) aux[++k] = v[i++];
else aux[++k] = v[j++];
}
while (i <= middle)
aux[++k] = v[i++];
while (j <= end)
aux[++k] = v[j++];
for (i = 1; i <= k; ++i)
v[start + i - 1] = aux[i];
}
int main() {
fin >> N;
for (int i = 1; i <= N; ++i)
fin >> v[i];
mergesort(1, N);
for (int i = 1; i <= N; ++i)
fout << v[i] << ' ';
fout << '\n';
return 0;
}