Pagini recente » Cod sursa (job #127319) | Cod sursa (job #1398082) | Cod sursa (job #2765445) | Statistici Tofan Vasile (varuvasi) | Cod sursa (job #3285057)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
void merge(vector<int>& v, int l, int m, int r)
{
int s1(m - l + 1), s2(r - m);
vector<int> L(s1), R(s2);
for (int i = 0; i < s1; ++i)
L[i] = v[l + i];
for (int i = 0; i < s2; ++i)
R[i] = v[m + i + 1];
int i(0), j(0), k(l);
while (i < s1 && j < s2)
if (L[i] <= R[i])
v[++k] = L[i++];
else
v[++k] = R[j++];
while (i < s1)
v[++k] = L[i++];
while (j < s2)
v[++k] = R[j++];
}
void mS(vector<int>& v, int l, int r)
{
if (l < r)
{
int m = (l + (r - l)) >> 1;
mS(v, l, m);
mS(v, m + 1, r);
merge(v, l, m, r);
}
}
int main()
{
int n; f >> n;
try {
vector<int> v(n);
for (int i = 0; i < n; ++i) f >> v[i];
mS(v, 0, n - 1);
for (int i = 0; i < n; ++i)
g << v[i] << " ";
}
catch (exception e)
{
throw(e);
exit;
}
f.close();
g.close();
return 0;
}