Pagini recente » Cod sursa (job #1521219) | Cod sursa (job #2268327) | Cod sursa (job #1174305) | Cod sursa (job #1068798) | Cod sursa (job #2065681)
#include <fstream>
#define Nmax 500001
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
unsigned int v[Nmax],vSortat[Nmax];
void Interclasare(int st1,int dr1,int st2,int dr2)
{
int k=0,pozInitiala=st1;
while(st1<=dr1 && st2<=dr2)
{
if(v[st1]<v[st2])
{
vSortat[++k]=v[st1];
++st1;
}
else
{
if(v[st1]>v[st2])
{
vSortat[++k]=v[st2];
++st2;
}
else
{
vSortat[++k]=v[st1];
++st1;
vSortat[++k]=v[st2];
++st2;
}
}
}
while(st1<=dr1)
{
vSortat[++k]=v[st1];
++st1;
}
while(st2<=dr2)
{
vSortat[++k]=v[st2];
++st2;
}
for(int i=1;i<=k;++i)
v[pozInitiala+i-1]=vSortat[i];
}
void MergeSort(int st,int dr)
{
if(st<dr)
{
int mij=(st+dr)/2;
MergeSort(st,mij);
MergeSort(mij+1,dr);
Interclasare(st,mij,mij+1,dr);
}
}
int main()
{
int N;
f>>N;
for(int i=1;i<=N;++i)
f>>v[i];
MergeSort(1,N);
for(int i=1;i<=N;++i)
g<<v[i]<<' ';
return 0;
}