Pagini recente » Cod sursa (job #2562721) | Borderou de evaluare (job #1232189) | Borderou de evaluare (job #1920017) | Cod sursa (job #869382)
Cod sursa(job #869382)
#include <vector>
#include <cstdlib>
#include <fstream>
#include <iterator>
#include <algorithm>
using namespace std;
const int NMAX = 500011;
const char INPUT[] = "input.in";
const char OUTPUT[] = "output.out";
inline void swap(int& x, int& y) {int aux = x; x = y; y = aux;}
void MergeSort(vector<int>& v, vector<int>& aux, int left, int right)
{
if(left >= right) return;
if(right - left <= 9)
{
for(int i = left; i < right; ++i)
{
for(int j = i + 1; j <= right; ++j)
{
if(v[i] > v[j])
swap(v[i], v[j]);
}
}
}
else
{
int i, j , k;
int middle = (left + right) >> 1;
MergeSort(v, aux, left, middle);
MergeSort(v, aux, middle + 1, right);
if(v[middle] <= v[middle + 1]) return;
for(k = i = left, j = middle + 1; i <= middle && j <= right;)
{
if(v[i] <= v[j])
{
aux[k++] = v[i++];
}
else {
aux[k++] = v[j++];
}
}
for(; i <= middle; ++i, ++k) aux[k] = v[i];
for(; j <= right; ++j, ++k) aux[k] = v[j];
for(i = left; i <= right; ++i)
{
v[i] = aux[i];
}
}
}
inline void MergeSort(vector<int>& v)
{
vector<int> aux(v.size());
MergeSort(v, aux, 0, v.size() - 1);
}
int main()
{
int N;
vector<int> v;
ifstream in(INPUT);
ofstream out(OUTPUT);
in >> N;
copy(istream_iterator<int>(in), istream_iterator<int>(), back_inserter(v));
MergeSort(v);
copy(v.begin(), v.end(), ostream_iterator<int>(out, " "));
return EXIT_SUCCESS;
}