Pagini recente » Istoria paginii runda/3_martie_simulare_oji_2024_clasa_9/clasament | Istoria paginii runda/9_martie_simulare_oji_2024_clasa_10 | Cod sursa (job #118107) | Cod sursa (job #2669583) | Cod sursa (job #1238629)
#include <iostream>
#include <fstream>
using namespace std;
const int NMax = 500010;
int n;
int a[NMax], aux[NMax];
void Read()
{
ifstream f ("algsort.in");
f >> n;
for (int i = 1; i <= n; ++ i)
f >> a[i];
f.close();
}
inline void MergeSort(const int st, const int dr)
{
if (dr - st < 1)
return ;
if (dr - st == 1)
{
if (a[st] > a[dr])
swap(a[st], a[dr]);
return ;
}
int mij = (st+dr) >> 1;
MergeSort(st, mij);
MergeSort(mij + 1, dr);
int i, j, poz = st - 1;
i = st, j = mij + 1;
while (i <= mij && j <= dr)
{
if (a[i] < a[j])
aux[++poz] = a[i++];
else
aux[++poz] = a[j++];
}
while (i <= mij)
aux[++poz] = a[i++];
while (j <= dr)
aux[++poz] = a[j++];
for (int i = st; i <= dr; ++ i) a[i] = aux[i];
}
void Write()
{
ofstream g ("algsort.out");
for (int i = 1; i <= n; ++ i)
g << a[i] << " ";
g << "\n";
g.close();
}
int main()
{
Read();
MergeSort(1, n);
Write();
return 0;
}