Pagini recente » Diferente pentru utilizator/clelia intre reviziile 17 si 16 | Profil Simon2712 | bruh | Monitorul de evaluare | Cod sursa (job #2051273)
#include <bits/stdc++.h>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
const int NMax = 5e5 + 5;
int b[NMax];
void Interclasare(int a[], int st, int mid, int dr)
{
int i = st;
int j = mid + 1;
int k = 0;
while(i <= mid and j <= dr) {
if(a[i] <= a[j]) {
b[++k] = a[i];
++i;
}
else {
b[++k] = a[j];
++j;
}
}
while(i <= mid) {
b[++k] = a[i];
++i;
}
while(j <= dr) {
b[++k] = a[j];
++j;
}
k = 1;
for(int i = st; i <= dr; ++i) {
a[i] = b[k++];
}
}
void MergeSort(int a[], int st, int dr)
{
if(st < dr) {
int mid = (st + dr) / 2;
MergeSort(a, st, mid);
MergeSort(a, mid + 1, dr);
Interclasare(a, st, mid, dr);
}
}
int main()
{
int N;
f >> N;
int a[NMax];
for(int i = 1; i <= N; ++i) {
f >> a[i];
}
MergeSort(a, 1, N);
for(int i = 1; i <= N; ++i) {
g << a[i] << " ";
}
return 0;
}