Pagini recente » Cod sursa (job #517942) | Cod sursa (job #2066516) | Cod sursa (job #527087) | Cod sursa (job #1340613) | Cod sursa (job #795818)
Cod sursa(job #795818)
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define NMAX 500005
int n,A[NMAX],B[NMAX],C[NMAX],r,t,poz,val;
void sort(int st,int dr)
{
if (st>=dr)
return ;
int i,r,t;
r=t=0;
poz=rand()%(dr-st+1)+st; val=A[poz];
for (i=st; i<=dr; i++)
{
if (A[i]<val)
B[++r]=A[i];
if (A[i]>val)
C[++t]=A[i];
}
for (i=1; i<=r; i++)
A[st+i-1]=B[i];
for (i=st+r; i<=dr-t; i++)
A[i]=val;
for (i=1; i<=t; i++)
A[dr-t+i]=C[i];
sort(st,st+r-1);
sort(dr-t+1,dr);
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
srand(time(0));
scanf("%d",&n);
int i;
for (i=1; i<=n; i++)
scanf("%d",&A[i]);
sort(1,n);
for (i=1; i<=n; i++)
printf("%d ",A[i]);
printf("\n");
return 0;
}