Pagini recente » Cod sursa (job #1392235) | Cod sursa (job #3031468) | Cod sursa (job #2801121) | Cod sursa (job #895148) | Cod sursa (job #1778115)
// MERGESORT
#include <iostream>
#include <fstream>
#define NMAX 500001
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
int A[NMAX], AUX[NMAX], k, n;
void Merge(int xA, int yA, int xB, int yB)
{
int i = xA, j = xB;
k = 0;
while (i <= yA && j <= yB)
{
if (A[i] < A[j])
AUX[++k] = A[i++];
else
if (A[i] > A[j])
AUX[++k] = A[j++];
else
AUX[++k] = A[i++], AUX[++k] = A[j++];
}
while (i<=yA)
AUX[++k] = A[i++];
while (j<=yB)
AUX[++k] = A[j++];
}
void MergeSort(int x, int y)
{
int m;
if (x <= y)
{
m = x + (y - x) / 2;
if (x != y)
{
MergeSort(x, m);
MergeSort(m + 1, y);
}
Merge(x,m,m+1,y);
for (int i = 1; i <= k; i++)
A[i + x - 1] = AUX[i];
}
}
int main()
{
in >> n;
for (int i = 1; i <= n; i++)
in >> A[i];
in.close();
MergeSort(1, n);
for (int i = 1; i <= n; i++)
out << A[i] << " ";
out.close();
return 0;
}