Pagini recente » Cod sursa (job #2882558) | Cod sursa (job #1309105) | Cod sursa (job #551959) | Cod sursa (job #2526651) | Cod sursa (job #2618783)
#include <iostream>
#include <vector>
#include <fstream>
void Merge(std::vector<int>& v, int st, int dr)
{
int i, j, k, n, m;
int mij = st + (dr - st) / 2;
n = (mij - st) + 1;
m = (dr - mij);
std::vector<int> vst, vdr;
for (i = 0; i < n; i++)
vst.push_back(v[st + i]);
for (j = 0; j < m; j++)
vdr.push_back(v[mij + j + 1]);
i = 0; j = 0; k = st;
while (i < n && j < m)
{
if (vst[i] < vdr[j])
{
v[k] = vst[i];
i++;
}
else
{
v[k] = vdr[j];
j++;
}
k++;
}
while (i < n)
{
v[k] = vst[i];
i++;
k++;
}
while (j < m)
{
v[k] = vdr[j];
j++;
k++;
}
}
void MergeSort(std::vector<int>& v, int st, int dr)
{
if (st >= dr)
return;
int mij = st + (dr - st) / 2;
MergeSort(v, st, mij);
MergeSort(v, mij + 1, dr);
Merge(v, st, dr);
}
int main()
{
int n, x;
std::vector<int> sir;
std::ifstream in("algsort.in");
std::ofstream out("algsort.out");
in >> n;
for (int i = 0; i < n; i++) {
in >> x;
sir.push_back(x);
}
MergeSort(sir, 0, n-1);
for (int i = 0; i < n; i++) {
out << sir[i]<<" ";
}
}