Pagini recente » Cod sursa (job #873830) | Cod sursa (job #378870) | Cod sursa (job #1708865) | Cod sursa (job #2864022) | Cod sursa (job #1701615)
#include <iostream>
#include <fstream>
#define DM 500005
using namespace std;
void merge_Arrays (int *v, int l, int m, int h)
{
int *left;
int *right;
int i, j, k, nl, nr;
nl = m - l + 1; // nl - nr of elements in left array
nr = h - m; //nr - nr of elements in right array
left = new int [nl + 1];
right = new int [nr + 1];
for (i = 0; i < nl; ++ i) //v [m] is taken
{
left [i] = v [l + i];
}
for (i = 0; i < nr; ++ i) //v [m] is not taken
{
right [i] = v [m + i + 1];
}
i = j = 0;
k = l; // k - iterator for the original array
while (i < nl && j < nr)
{
if (left [i] <= right [j])
{
v [k] = left [i ++];
}
else
{
v [k] = right [j ++];
}
k ++;
}
while (i < nl)
{
v [k ++] = left [i ++];
}
while (j < nr)
{
v [k ++] = right [j ++];
}
delete (left);
delete (right);
}
void merge_Sort (int *v, int l, int r)
{
if (l == r) return;
int m = (l + r) / 2;
merge_Sort (v, l, m);
merge_Sort (v, m + 1, r);
merge_Arrays (v, l, m, r);
}
void print_Array (int *v, int n, ofstream& out)
{
int i;
for (i = 0; i < n; ++ i)
out << v [i] << ' ';
out << '\n';
}
int main()
{
ifstream f ("algsort.in");
ofstream g ("algsort.out");
int *v;
int n, i, l, r;
f >> n;
v = new int [n];
for (i = 0; i < n; ++ i)
{
f >> v [i];
}
l = 0;
r = n - 1;
merge_Sort(v, l, r);
print_Array (v, n, g);
return 0;
}