Pagini recente » Cod sursa (job #832209) | Cod sursa (job #2882993) | Cod sursa (job #193292) | Cod sursa (job #624796) | Cod sursa (job #1308146)
#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;
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];
if(ns>1)
quick(st,st+ns-1,m[(st+st+ns-1)/2]);
if(nd>1)
quick(dr-nd+1,dr,m[(dr-nd+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;
}