Pagini recente » Cod sursa (job #1166491) | Cod sursa (job #1172004) | Cod sursa (job #2187192) | Cod sursa (job #3033530) | Cod sursa (job #1785772)
#include <fstream>
#include <cstdlib>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int n, *v, *rez;
void InterClasare(int st1, int dr1, int st2, int dr2)
{
int i1 = st1, i2 = st2, k = 0;
rez = (int*)calloc(dr2 - st1 + 1, sizeof(int));
while (i1 <= dr1 && i2 <= dr2)
if (v[i1] <= v[i2])
rez[k++] = v[i1++];
else
rez[k++] = v[i2++];
while (i1 <= dr1)
rez[k++] = v[i1++];
while (i2 <= dr2)
rez[k++] = v[i2++];
for (int i = st1, j = 0; j < k; ++i, ++j)
v[i] = rez[j];
}
void MergeSort(int st, int dr)
{
if (dr - st >= 1)
{
int mij = st + (dr - st) / 2;
MergeSort(st, mij);
MergeSort(mij + 1, dr);
InterClasare(st, mij, mij + 1, dr);
}
}
int main()
{
f >> n;
v = (int*)calloc(n, sizeof(int));
for (int i = 0; i < n; ++i)
f >> v[i];
MergeSort(0, n - 1);
for (int i = 0; i < n; ++i)
g << v[i] << " ";
return 0;
}