Pagini recente » Cod sursa (job #2699393) | Cod sursa (job #536524) | Cod sursa (job #2703830) | Cod sursa (job #1831872) | Cod sursa (job #3206235)
#include <fstream>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
const int MAX_N = 500005;
int n;
int v[MAX_N], merged[MAX_N];
void Merge(int lf, int rg) {
int mid = lf + ((rg - lf) / 2);
int aIdx = lf;
int bIdx = mid + 1;
int size = rg - lf + 1;
for (int i = 0; i < size; i++) {
if (aIdx <= mid && bIdx <= rg) {
if (v[aIdx] < v[bIdx]) {
merged[i] = v[aIdx];
aIdx++;
}
else {
merged[i] = v[bIdx];
bIdx++;
}
}
else if (aIdx <= mid) {
merged[i] = v[aIdx];
aIdx++;
}
else if (bIdx <= rg) {
merged[i] = v[bIdx];
bIdx++;
}
}
for (int i = lf; i <= rg; i++) {
v[i] = merged[i - lf];
}
}
void MSort(int v[], int lf, int rg) {
if (lf >= rg) {
return;
}
int mid = lf + ((rg - lf) / 2);
MSort(v, lf, mid);
MSort(v, mid + 1, rg);
Merge(lf, rg);
}
int main() {
fin >> n;
for (int i = 1; i <= n; i++) {
fin >> v[i];
}
MSort(v, 1, n);
for (int i = 1; i <= n; i++) {
fout << v[i] << ' ';
}
fout << '\n';
}