Pagini recente » Cod sursa (job #970289) | Cod sursa (job #352651) | Cod sursa (job #561518) | Cod sursa (job #285857) | Cod sursa (job #2986431)
#include <cstdio>
#include <cmath>
#include <climits>
#include <vector>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <bitset>
#include <unordered_map>
#include <cstring>
#include <algorithm>
#define NMAX 500003
using namespace std;
FILE* fin, * fout;
int n;
int v[NMAX];
void mergeSort(int st, int dr)
{
if (st < dr)
{
int mij = (st + dr) / 2;
mergeSort(st, mij);
mergeSort(mij + 1, dr);
//interclasez
int i = st, j = mij + 1;
vector<int>sol;
while (i <= mij && j <= dr)
{
if (v[i] < v[j])
{
sol.push_back(v[i]);
i++;
}
else {
sol.push_back(v[j]);
j++;
}
}
while (i <= mij)
{
sol.push_back(v[i]);
i++;
}
while (j <= dr)
{
sol.push_back(v[j]);
j++;
}
for (int i = 0; i < sol.size(); i++)
{
v[st + i] = sol[i];
}
}
}
int main()
{
fin = fopen("algsort.in", "r");
fout = fopen("algsort.out", "w");
fscanf(fin,"%d", &n);
for (int i = 1; i <= n; i++)
{
fscanf(fin,"%d", &v[i]);
}
mergeSort(1, n);
for (int i = 1; i <= n; i++)
{
fprintf(fout,"%d ", v[i]);
}
return 0;
}