Pagini recente » Cod sursa (job #2206407) | Cod sursa (job #523594) | Cod sursa (job #2427407) | Cod sursa (job #2423236) | Cod sursa (job #1226522)
#include <fstream>
using namespace std;
void Merge(int *a, int na, int *b, int nb, int *c)
{
int i = 0, j = 0, k = 0;
while (i < na && j < nb)
{
if (a[i] <= b[j])
{
c[k] = a[i];
i++;
k++;
}
else
{
c[k] = b[j];
j++;
k++;
}
}
while (i < na)
{
c[k] = a[i];
i++;
k++;
}
while (j < nb)
{
c[k] = b[j];
j++;
k++;
}
}
void MergeSort(int *v, int n) {
if (n <= 1)
return;
int *left_v = new int[n / 2];
int *right_v = new int[n - n / 2];
for (int i = 0; i < n / 2; i++)
left_v[i] = v[i];
for (int i = 0; i < n - n / 2; i++)
right_v[i] = v[i + n / 2];
MergeSort(left_v, n / 2);
MergeSort(right_v, n - n / 2);
Merge(left_v, n / 2, right_v, n - n / 2, v);
delete[] left_v;
delete[] right_v;
}
int main()
{
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n;
fin >> n;
int *v = new int[n];
for (int i = 0; i < n; i++)
fin >> v[i];
MergeSort(v, n);
for (int i = 0; i < n; i++)
fout << v[i] << " ";
fout << "\n";
fin.close();
fout.close();
return 0;
}