Pagini recente » Cod sursa (job #2247766) | Cod sursa (job #1254126) | Cod sursa (job #227541) | Cod sursa (job #2110724) | Cod sursa (job #2864733)
#include <fstream>
#include <algorithm>
int N;
int v[500001];
int tmp[500001];
void merge(int left, int mid, int right) {
int i = left, j = mid + 1;
int cnt = 0;
while (i <= mid && j <= right) {
if (v[i] <= v[j])
tmp[cnt++] = v[i++];
else
tmp[cnt++] = v[j++];
}
while (i <= mid)
tmp[cnt++] = v[i++];
while (j <= right)
tmp[cnt++] = v[j++];
std::copy(tmp, tmp + cnt, v + left);
}
void mergesort(int left, int right) {
if (left == right)
return;
int mid = (left + right) / 2;
mergesort(left, mid);
mergesort(mid + 1, right);
merge(left, mid, right);
}
int main() {
std::ifstream in("algsort.in");
in >> N;
for (int i = 0; i < N; ++i)
in >> v[i];
mergesort(0, N - 1);
std::ofstream out("algsort.out");
for (int i = 0; i < N; ++i)
out << v[i] << ' ';
}