Pagini recente » Cod sursa (job #2828334) | Cod sursa (job #2323724) | Cod sursa (job #1922417) | Cod sursa (job #2679808) | Cod sursa (job #2935617)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n;
int v[500005];
int mrg[500005];
void mergeArr(int v[], int lf, int rg, int mid)
{
int a1 = lf;//a = lf
int a2 = mid;
int b1 = mid + 1;//b = rg
int b2 = rg;
for (int i = lf; i <= rg; i++)
{
if ((a1 <= a2 && v[a1] <= v[b1]) || b1 > b2)
{
mrg[i] = v[a1];
a1++;
}
else
{
mrg[i] = v[b1];
b1++;
}
}
for (int i = lf; i <= rg; i++)
{
v[i] = mrg[i];
}
}
void mergeSort(int v[], int lf, int rg)
{
if (lf == rg)
{
return;
}
if (lf + 1 == rg)
{
if (v[lf] > v[rg])
{
swap(v[lf], v[rg]);
}
return;
}
int mid = (lf + rg) / 2;
mergeSort(v, lf, mid);
mergeSort(v, mid + 1, rg);
mergeArr(v, lf, rg, mid);
}
int main()
{
fin >> n;
for (int i = 1; i <= n; i++)
{
fin >> v[i];
}
mergeSort(v, 1, n);
for (int i = 1; i <= n; i++)
{
fout << v[i] << ' ';
}
return 0;
}