Pagini recente » Cod sursa (job #2933596) | Cod sursa (job #459552) | Borderou de evaluare (job #2538225) | Cod sursa (job #2129604) | Cod sursa (job #3309331)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n;
vector<int> v;
vector<int> interclasare(vector<int> &a, vector<int> &b)
{
vector<int> c;
int i = 0, j = 0;
while (i < a.size() && j < b.size())
{
if (a[i] <= b[j])
{
c.push_back(a[i++]);
}
else if (a[i] > b[j])
{
c.push_back(b[j++]);
}
}
while (i < a.size())
{
c.push_back(a[i++]);
}
while (j < b.size())
{
c.push_back(b[j++]);
}
return c;
}
void mergeSort(int st, int dr)
{
if (st == dr)
{
return;
}
else
{
int mid = (st + dr) / 2;
mergeSort(st, mid);
mergeSort(mid + 1, dr);
vector<int> a;
for (int i = st; i <= mid; i++)
{
a.push_back(v[i]);
}
vector<int> b;
for (int i = mid + 1; i <= dr; i++)
{
b.push_back(v[i]);
}
vector<int> c = interclasare(a, b);
for (int i = st, idx = 0; i <= dr; i++, idx++)
{
v[i] = c[idx];
}
}
}
int main()
{
fin >> n;
v.resize(n + 1);
for (int i = 1; i <= n; i++)
{
fin >> v[i];
}
mergeSort(1, n);
for (int i = 1; i <= n; i++)
{
fout << v[i] << " ";
}
return 0;
}