Pagini recente » Cod sursa (job #2050649) | Cod sursa (job #1259663) | Cod sursa (job #42409) | Cod sursa (job #1164032) | Cod sursa (job #1333049)
#include<iostream>
#include<fstream>
using namespace std;
fstream in("algsort.in",ios::in);
fstream out("algsort.out",ios::out);
void mrgsort(int*,int);
void sparge(int*,int,int);
void imbina(int*,int*,int,int,int);
int main()
{
int a[500000],n,i;
in>>n;
for(i=0;i<n;i++)
in>>a[i];
mrgsort(a,n);
for(i=0;i<n;i++)
out<<a[i]<<" ";
in.close();
out.close();
return 0;
}
void mrgsort(int a[],int n)
{
sparge(a,0,n);
}
void sparge(int a[],int down,int up)
{
int b[up-down+2];
int mid;
if((up-down)<2)
return ;
mid=down+(up-down)/2;
sparge(a,down,mid);
sparge(a,mid,up);
imbina(a,b,down,mid,up);
for(int i=down;i<up;i++)
a[i]=b[i];
}
void imbina(int a[],int b[],int down,int mid,int up)
{
int idown=down;
int imid=mid;
for(int i=down;i<up;i++)
if(idown<mid&&(imid>=up||a[idown]<a[imid]))
{
b[i]=a[idown];
idown++;
}
else
{
b[i]=a[imid];
imid++;
}
}