Pagini recente » Cod sursa (job #440867) | Cod sursa (job #2740874) | Cod sursa (job #3040430) | Cod sursa (job #2274113) | Cod sursa (job #2087163)
#include <bits/stdc++.h>
#define Nmax 511111
using namespace std;
int v[Nmax],aux[Nmax],n;
ifstream fin ("algsort.in");
ofstream fout ("algsort.out");
void interclasare(int st , int dr)
{
int mij=(st+dr)/2,a=st,b=mij+1,i=st;
while (a<=mij && b<=dr)
{
if (v[a]<v[b])
{
aux[i]=v[a];
a++;
i++;
}
else
{
aux[i]=v[b];
b++;
i++;
}
if (a>mij)
{
while (b<=dr && i<=dr)
{
aux[i]=v[b];
b++;
i++;
}
break;
}
if (b>dr)
{
while (a<=mij && i<=dr)
{
aux[i]=v[a];
a++;
i++;
}
break;
}
}
for (int i=st;i<=dr;++i)
{
v[i]=aux[i];
}
}
int brut (int st,int dr)
{
int vf=1;
while (vf==1)
{
vf=0;
for (int i=st;i<dr;++i)
{
if (v[i]>v[i+1])
{
vf=1;
swap(v[i],v[i+1]);
}
}
}
}
void merge_sort (int st,int dr)
{
//fout<<st<<" "<<dr<<endl;
if (dr-st+1<=3)
{
brut(st,dr);
}
else
{
int mij=(st+dr)/2;
merge_sort(st,mij);
merge_sort (mij+1,dr);
interclasare(st,dr);
}
//fout<<endl<<endl;;
}
int main()
{
fin>>n;
for (int i=1;i<=n;++i)
{
fin>>v[i];
}
merge_sort(1,n);
for (int i=1;i<=n;++i)
{
cout<<v[i]<<" ";
}
}