Pagini recente » Cod sursa (job #1371862) | Cod sursa (job #2785350) | Cod sursa (job #1173626) | Cod sursa (job #2224450) | Cod sursa (job #3322084)
#include <iostream>
#include <cctype>
#include <fstream>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
int a[500005],n,l_ar[250005],r_ar[250005];
void merge(int l, int r) {
int mij = (l + r) / 2;
int l_size = 0, r_size = 0, l_ind = 1, r_ind = 1;
for (int i = l; i <= mij; i++)l_ar[++l_size] = a[i];
for (int i = mij + 1; i <= r; i++)r_ar[++r_size] = a[i];
int ind = l;
for (;l_ind<=l_size && r_ind<=r_size;ind++) {
if (l_ar[l_ind] < r_ar[r_ind]) {
a[ind] = l_ar[l_ind++];
}
else {
a[ind] = r_ar[r_ind++];
}
}
if (l_ind > l_size) {
while (r_ind <= r_size) {
a[ind++] = r_ar[r_ind++];
}
}
else {
while (l_ind <= l_size) {
a[ind++] = l_ar[l_ind++];
}
}
}
void merge_sort(int l, int r) {
if (l >= r)return;
int mij = (l + r) / 2;
merge_sort(l, mij);
merge_sort(mij + 1, r);
merge(l, r);
}
int main()
{
in >> n;
for (int i = 1; i <= n; i++) {
in >> a[i];
}
merge_sort(1, n);
for (int i = 1; i <= n; i++) {
out << a[i] << ' ';
}
return 0;
}