Pagini recente » Cod sursa (job #3245526) | Cod sursa (job #1246667) | Cod sursa (job #1961771) | Cod sursa (job #2726946) | Cod sursa (job #1010912)
#include <fstream>
#include <cstdlib>
using namespace std;
#define NMAX 500001
int n, A[NMAX], B[NMAX];
void sort(int left, int right)
{
// Daca avem un singur element ->> ata ete (e sortat)
if (left == right)
return;
int middle = (left + right) / 2;
// poz_a -> pozitia din stanga
// poz_b -> pozitia din mijloc
// cnt -> contor pentru interclasare *in place*
int poz_a, poz_b, cnt;
// Interclasare
for (poz_a = left, poz_b = middle + 1, cnt = 1; poz_a <= middle || poz_b <= right; )
if (poz_b > right || poz_a < middle && A[poz_a] < A[poz_b])
B[cnt++] = A[poz_a++];
else
B[cnt++] = A[poz_b++];
// Copiere elemente sortate in A
for (int i = left; i <= right; i++)
A[i] = B[i];
}
int main()
{
ifstream cin("algsort.in");
ofstream cout("algsort.out");
int n;
cin >> n;
for (int i = 1; i <= n; i++)
cin >> A[i];
sort(1, n);
for (int i = 1; i <= n; i++)
cout << A[i] << " ";
cin.close();
cout.close();
}