Pagini recente » Cod sursa (job #1470906) | Cod sursa (job #55531) | Cod sursa (job #1023008) | Cod sursa (job #2251689) | Cod sursa (job #1308158)
#include <cstdio>
using namespace std;
unsigned long int m[3000000],stanga[3000000],dreapta[3000000];
int n,ns,nd;
void quick(int st, int dr, int x)
{
int i,c=0,as,ad;
ns=0;
nd=0;
for(i=st;i<=dr;i++)
{
if(m[i]<x)
{
stanga[ns]=m[i];
ns++;
}
if(m[i]>x)
{
dreapta[nd]=m[i];
nd++;
}
if(m[i]==x)
c++;
}
for(i=0;i<ns;i++)
m[st+i]=stanga[i];
for(i=ns;i<ns+c;i++)
m[st+i]=x;
for(i=ns+c;i<ns+c+nd;i++)
m[st+i]=dreapta[i-ns-c];
as=ns;
ad=nd;
if(as>1)
quick(st,st+as-1,m[(st+st+as-1)/2]);
if(ad>1)
quick(dr-ad+1,dr,m[(dr-ad+1+dr)/2]);
}
int main()
{
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
scanf("%d ", &n);
int i;
for(i=0;i<n;i++)
scanf("%u ", &m[i]);
quick(0,n-1,m[(n-1)/2]);
for(i=0;i<n;i++)
printf("%u ", m[i]);
return 0;
}