Pagini recente » Cod sursa (job #185905) | Cod sursa (job #2739004) | Cod sursa (job #1203738) | Cod sursa (job #24471) | Cod sursa (job #728502)
Cod sursa(job #728502)
#include<fstream>
#define NMAX 500010
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int a[NMAX], x[NMAX], y[NMAX], n;
void Citeste()
{
int i;
f>>n;
for (i=1; i<=n; ++i) f>>a[i];
}
void Merge(int st, int dr)
{
int mij=(st+dr)>>1, aux, i, j, k;
if (dr-st+1>1)
if (st-dr+1==2)
{
if (a[st]>a[dr]) aux=a[st], a[st]=a[dr], a[dr]=aux;
}
else
{
Merge (st, mij);
Merge (mij+1, dr);
x[0]=mij-st+1;
for (i=st; i<=mij; ++i) x[i-st+1]=a[i];
y[0]=dr-mij;
for (i=mij+1; i<=dr; ++i) y[i-mij]=a[i];
i=1; j=1; k=0;
while (i<=x[0] && j<=y[0])
if (x[i]<y[j]) a[st+k]=x[i++], k++;
else a[st+k]=y[j++], k++;
while (i<=x[0]) a[st+k]=x[i++], k++;
while (j<=y[0]) a[st+k]=y[j++], k++;
}
}
void Scrie()
{
int i;
g<<a[1];
for (i=2; i<=n; ++i) g<<" "<<a[i];
g<<"\n";
}
int main()
{
Citeste();
Merge(1, n);
Scrie();
f.close();
g.close();
return 0;
}