Pagini recente » Cod sursa (job #860141) | Cod sursa (job #2846150) | Cod sursa (job #2584729) | Cod sursa (job #253914) | Cod sursa (job #2531647)
#include <bits/stdc++.h>
using namespace std;
ofstream g("algsort.out");
ifstream f("algsort.in");
int n;
int a[500000];
int p = 31999;
char buffer[32010];
void inc()
{
++p;
if(p == 32000)
{
fread(buffer,1,32000,stdin);
p = 0;
}
}
void read(int &n)
{
n = 0;
while(buffer[p] < '0' || buffer[p] > '9')
inc();
while(buffer[p] >= '0' && buffer[p] <= '9')
{
n = n * 10 + buffer[p] - '0';
inc();
}
}
void Read()
{
freopen("algsort.in","r",stdin);
read(n);
for(int i = 0;i < n;++i)
read(a[i]);
}
void merge(int a[],int l,int m,int r)
{
int n1 = m - l + 1;
int n2 = r - m;
int L[n1],R[n2];
for(int i = 0;i < n1;++i)
L[i] = a[l + i];
for(int j = 0;j < n2;++j)
R[j] = a[m + j + 1];
int i = 0;
int j = 0;
int k = l;
while(i < n1 && j < n2)
if(L[i] <= R[j])
a[k++] = L[i++];
else
a[k++] = R[j++];
while(i < n1)
a[k++] = L[i++];
while(j < n2)
a[k++] = R[j++];
}
void MergeSort(int a[],int l,int r)
{
if(l < r)
{
int m = l + (r - l) / 2;
MergeSort(a,l,m);
MergeSort(a,m + 1,r);
merge(a,l,m,r);
}
}
void Print()
{
for(int i = 0;i < n;++i)
g<<a[i]<<" ";
g.close();
}
int main()
{
Read();
MergeSort(a,0,n-1);
Print();
return 0;
}