Pagini recente » Cod sursa (job #450967) | Cod sursa (job #1142851) | Cod sursa (job #3267988) | Cod sursa (job #251352) | Cod sursa (job #1855404)
#include <fstream>
#include <climits>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int a[500005],n;
void mrge(int a[],int p,int q,int r)
{
int n1,n2,st[q-p+1],dr[r-q+1];
n1 = q - p;
n2 = r - q;
for(int i=0;i<n1;i++)
st[i]=a[p+i];
for(int i=0;i<n2;i++)
dr[i]=a[q+i];
st[n1]=INT_MAX;
dr[n2]=INT_MAX;
int i = 0,j = 0;
for(int k=p;k<r;k++)
{
if(st[i]<=dr[j])
{
a[k] = st[i];
i++;
}
else
{
a[k] = dr[j];
j++;
}
}
}
void mergeSort (int a[],int p,int r)
{
if(p+1<r)
{
int q = (p+r)/2;
mergeSort(a,p,q);
mergeSort(a,q,r);
mrge(a,p,q,r);
}
}
int main()
{
fin>>n;
for(int i=0;i<n;i++)
fin>>a[i];
mergeSort(a,0,n);
for(int i=0;i<n;i++)
fout<<a[i]<<" ";
return 0;
}