Pagini recente » Cod sursa (job #3296815) | Cod sursa (job #2607156) | Cod sursa (job #3299253) | Cod sursa (job #1071759) | Cod sursa (job #869329)
Cod sursa(job #869329)
#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";
class Sort
{
Sort();
Sort(Sort& x);
static void swap(int& x, int& y) {int aux = x; x = y; y = aux;}
static void MergeSort(vector<int>& v, vector<int>& aux, int left, int right);
public:
static void MergeSort(vector<int>& v)
{
vector<int> aux (v.size());
MergeSort(v, aux, 0, v.size()-1);
}
};
void Sort::MergeSort(vector<int>& v, vector<int>& aux, int left, int right)
{
if(left >= right) return;
if(right - left <= 10)
{
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 = 0;
int middle = (left + right) >> 1;
MergeSort(v, aux, left, middle);
MergeSort(v, aux, middle + 1, right);
if(v[middle] <= v[middle + 1]) return;
for(i = left, j = middle + 1; i <= middle || j <= right; )
{
if(i <= middle && v[i] <= v[j])
{
aux[k++] = v[i++];
}
else {
aux[k++] = v[j++];
}
}
for(i = left; i <= right; ++i)
{
v[i] = aux[i];
}
}
}
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));
Sort::MergeSort(v);
copy(v.begin(), v.end(), ostream_iterator<int>(out, " "));
return EXIT_SUCCESS;
}