Pagini recente » Cod sursa (job #1108412) | Cod sursa (job #1446222) | Cod sursa (job #1471252) | Cod sursa (job #2254484) | Cod sursa (job #1701486)
#include <iostream>
#include <fstream>
using namespace std;
void merge_Arrays (int *v, int l, int m, int h)
{
int left [55];
int right [55];
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
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 ++];
}
}
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 [105];
int n, i, l, r, m;
f >> 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;
}