Pagini recente » Infoarena Monthly 2012, Runda 12 | Cod sursa (job #2020661) | Cod sursa (job #1305680) | Cod sursa (job #1852053) | Cod sursa (job #2064638)
#include <cstdio>
#include <cstdlib>
using namespace std;
int n,v[500010];
void swap(int &a,int &b)
{
int aux;
aux = a;
a = b;
b = aux;
}
int part_Hoare(int st, int dr)
{
int pivot = st + (rand() % (dr - st + 1));
int i = st-1,j = dr + 1;
while(1)
{
do{
i++;
}while(v[i] < v[pivot]);
do{
j--;
}while(v[j] > v[pivot]);
if(i>=j)
return j;
swap(v[i],v[j]);
}
}
void qsort(int st,int dr)
{
if(st < dr)
{
int k = part_Hoare(st,dr);
qsort(st,k);
qsort(k+1,dr);
}
}
int main()
{
int i;
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",v+i);
qsort(1,n);
for(i=1;i<=n;i++)
printf("%d ",v[i]);
}