Pagini recente » Cod sursa (job #2541107) | Cod sursa (job #2802775) | Cod sursa (job #2152131) | Cod sursa (job #1905633) | Cod sursa (job #1855058)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int A[500005], B[250005], N, k;
void Read()
{
fin >> N;
for(int i=1; i<=N; i++)
fin >> A[i];
}
void Merge(int L, int M, int R)
{
int i=L, j=M+1, k=0;
fill(B, B+(R-L)+1, 0);
while(i<=M && j<=R)
{
if(A[i] < A[j]) B[k] = A[i++];
else B[k] = A[j++];
k++;
}
while(i <= M) B[k++] = A[i++];
while(j <= R) B[k++] = A[j++];
for(i=L; i<=R; i++) A[i] = B[i-L];
}
void MergeSort(int A[], int Left, int Right)
{
if(Left < Right)
{
int Mid = (Left+Right)/2;
MergeSort(A, Left, Mid);
MergeSort(A, Mid+1, Right);
Merge(Left, Mid, Right);
}
}
void Print()
{
for(int i=1; i<=N; i++)
fout << A[i] << ' ';
fout << '\n';
}
int main()
{
Read();
MergeSort(A, 1, N);
Print();
return 0;
}