Pagini recente » Cod sursa (job #637503) | Cod sursa (job #2558196) | Cod sursa (job #1308317) | Cod sursa (job #2673751) | Cod sursa (job #2610274)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
void Interclasare(vector<int> &v, int left, int right);
void mergeSort(vector<int> &v, int left, int right);
int main()
{
int n, x;
vector<int> v;
// citesc vectorul
fin >> n;
for (size_t i = 0; i < n; i++)
{
fin >> x;
v.push_back(x);
}
mergeSort(v, 0, n - 1);
// afisez vectorul sortat
for (size_t i = 0; i < n; i++)
fout << v[i] << " ";
return 0;
}
void mergeSort(vector<int> &v, int left, int right)
{
if (left < right)
{
int middle = (left + right) / 2;
mergeSort(v, left, middle);
mergeSort(v, middle+1, right);
Interclasare(v, left, right);
}
}
void Interclasare(vector<int> &v, int left, int right)
{
int middle = (left + right) / 2;
int i = left, j = middle + 1;
vector<int> w;
while (i <= middle && j <= right)
if (v[i] < v[j])
{
w.push_back(v[i]);
i++;
}
else
{
w.push_back(v[j]);
j++;
}
while (i < middle)
{
w.push_back(v[i]);
i++;
}
while (j < right)
{
w.push_back(v[j]);
j++;
}
for (i = left; i <= right; i++)
v[i] = w[i - left];
}