Pagini recente » Cod sursa (job #1253824) | Cod sursa (job #340697) | Cod sursa (job #2696847) | Cod sursa (job #2475516) | Cod sursa (job #590767)
Cod sursa(job #590767)
#include <fstream>
#define n_max 500005
using namespace std ;
int a[n_max];
int n;
void interclasare(int,int,int);
void mergesort(int,int);
void citeste();
void afiseaza();
void interclasare (int st, int dr, int mij)
{
int b[n_max], i, j, k=0;
for (i=st,j=mij+1;i<=mij && j<=dr;)
{
if (a[i]<a[j])
b[k++]=a[i++];
else
b[k++]=a[j++];
}
for (;i<=mij;i++)
b[k++]=a[i];
for (;j<=dr;j++)
b[k++]=a[j];
for(i=0, j=st; j<=dr && i<k ;i++,j++)
a[j]=b[i];
}
void mergesort(int st, int dr)
{
if (st<dr)
{
int mij=(st+dr)/2;
mergesort(st,mij);
mergesort(mij+1,dr);
interclasare(st,dr,mij);
}
else if(dr-st==1)
{
if(a[st]>a[dr])
{
int aux=a[st];
a[st]=a[dr];
a[dr]=aux;
}
}
}
void citeste()
{
ifstream fin("algsort.in");
fin>>n;
for(int i=1;i<=n;i++)
fin>>a[i];
fin.close();
}
void afiseaza()
{
ofstream fout("algsort.out");
for(int i=1;i<=n;i++)
fout<<a[i]<<" ";
fout.close();
}
int main ()
{
citeste();
mergesort (1,n);
afiseaza ();
return 0;
}