Pagini recente » Cod sursa (job #1373767) | Cod sursa (job #1633203) | Cod sursa (job #30589) | Cod sursa (job #488403) | Cod sursa (job #1016934)
#include <fstream>
#include <vector>
using namespace std;
//functia pentru mergesort
void MergeSort(vector<int> &vec)
{
//daca vectorul are mai mult de 1 element
//in caz contrar vom considera vectorul sortat
if (vec.size() > 1)
{
//se imparte vectorul in 2 subvectori egali
vector<int> left(vec.begin(), vec.begin() + vec.size() / 2);
vector<int> right(vec.begin() + vec.size() / 2, vec.end());
//se aplica functia mergesort recursiv pentru fiecare jumatate
MergeSort(left);
MergeSort(right);
//se goleste vectorul actual pentru a se adauga elementele sortate
vec.clear();
//se realizeaza interclasarea celor 2 vectori sortati
while (!left.empty() && !right.empty())
{
if (left[0] < right[0])
{
vec.push_back(left[0]);
left.erase(left.begin());
}
else
{
vec.push_back(right[0]);
right.erase(right.begin());
}
}
while (left.empty() && !right.empty())
{
vec.push_back(right[0]);
right.erase(right.begin());
}
while (!left.empty() && right.empty())
{
vec.push_back(left[0]);
left.erase(left.begin());
}
}
}
int main()
{
ifstream IN("algsort.in");
ofstream OUT("algsort.out");
int n;
IN >> n;
vector<int> vec;
for (int i = 0; i < n; i++)
{
int x; IN >> x;
vec.push_back(x);
}
MergeSort(vec);
for (vector<int>::iterator it = vec.begin(); it != vec.end(); it++)
{
OUT << *it << " ";
}
OUT << "\n";
return 0;
}