Pagini recente » Cod sursa (job #877463) | Cod sursa (job #649377)
Cod sursa(job #649377)
#include <fstream>
#include <vector>
#define INFILE "algsort.in"
#define OUTFILE "algsort.out"
using namespace std;
void mergesort(vector<int> &a, int st, int dr)
{
if (st >= dr)
return;
int m = (st + dr) / 2;
mergesort(a, st, m);
mergesort(a, m+1, dr);
vector<int>::iterator first = a.begin() + st;
vector<int>::iterator middle = a.begin() + m + 1;
vector<int>::iterator second = a.begin() + m + 1;
vector<int>::iterator end = a.begin() + dr + 1;
vector<int> aux;
aux.reserve(dr-st+1);
while (first != middle && second != end)
{
if (*first < *second)
aux.push_back(*(first++));
else
aux.push_back(*(second++));
}
while (first != middle)
aux.push_back(*(first++));
while (second != end)
aux.push_back(*(second++));
for (vector<int>::iterator it1 = a.begin() + st, it2 = aux.begin(); it2 != aux.end(); ++it1, ++it2)
*it1 = *it2;
}
int main()
{
vector<int> v;
int n;
mergesort(v, 0, v.size()-1);
ifstream fin(INFILE);
ofstream fout(OUTFILE);
fin >> n;
v.reserve(n);
for(int i = 0; i<n; ++i){
int k;
fin >> k;
v.push_back(k);
}
mergesort(v, 0, n-1);
for(vector<int>::iterator it = v.begin(); it != v.end(); ++it)
fout << *it << " ";
fin.close();
fout.close();
return 0;
}