Pagini recente » Cod sursa (job #2429581) | Cod sursa (job #2453267) | Cod sursa (job #2328843) | Cod sursa (job #1718541) | Cod sursa (job #2667083)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
const int maxN=500005;
int g[maxN],v[maxN];
void interclasare(int v[],int st1,int dr1,int dr2)
{
int st2=dr1+1;
int k=st1,i=st1,j=st2;
while(i<=dr1 && j<=dr2)
{
if(v[i]<=v[j])
{
g[k]=v[i];
k++;
i++;
}
else
{
g[k]=v[j];
k++;
j++;
}
}
while(i<=dr1)
{
g[k]=v[i];
k++;
i++;
}
while(j<=dr2)
{
g[k]=v[j];
k++;
j++;
}
for(int i=st1;i<=dr2;i++)
{
v[i]=g[i];
}
}
void mergesort(int v[],int st,int dr)
{
if(dr==st)
{
return;
}
if(dr-st==1)
{
if(v[st]<=v[dr])
{
return;
}
else
{
swap(v[st],v[dr]);
return;
}
}
if(dr-st>=2)
{
int mijl=(st+dr)/2;
mergesort(v,st,mijl);
mergesort(v,mijl+1,dr);
interclasare(v,st,mijl,dr);
}
}
int main()
{
int n;
in>>n;
for(int i=0;i<n;i++)
{
in>>v[i];
}
mergesort(v,0,n-1);
for(int i=0;i<n;i++)
{
out<<v[i]<<' ';
}
return 0;
}