Pagini recente » Clasament Summer Challenge 2007 | Cod sursa (job #2341601) | Rating Alexandru Robert (skoda888) | Cod sursa (job #3030970) | Cod sursa (job #2653310)
#include <fstream>
#include <vector>
void merge(std::vector<int>& v, int left, int m, int right)
{
std::vector<int> tmp;
int i = m + 1;
int j = left;
while (j <= m && i <= right)
{
if (v[j] < v[i])
{
tmp.push_back(v[j]);
++j;
}
else
{
tmp.push_back(v[i]);
++i;
}
}
for (; j <= m; ++j)
{
tmp.push_back(v[j]);
}
for (; i <= right; ++i)
{
tmp.push_back(v[i]);
}
std::copy(tmp.begin(), tmp.end(), v.begin() + left);
}
void sort(std::vector<int>& v, int left, int right)
{
if (left >= right)
return;
int m = (left + right) >> 1;
sort(v, left, m);
sort(v, m + 1, right);
merge(v, left, m, right);
}
int main()
{
int n;
std::vector<int> v;
std::ifstream in("algsort.in");
in >> n;
v.resize(n);
for (int i = 0; i < n; ++i)
{
in >> v[i];
}
sort(v, 0, n - 1);
std::ofstream out("algsort.out");
for (int i = 0; i < n; ++i)
{
out << v[i] << ' ';
}
return 0;
}