Pagini recente » Cod sursa (job #1528636) | Cod sursa (job #1076984) | Cod sursa (job #3150773) | Cod sursa (job #1303045) | Cod sursa (job #483318)
Cod sursa(job #483318)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define Nmax 500001
#define swap(a,b) a^=b^=a^=b
int part(int st, int dr, int A[]) {
int i, j, val, pivot;
i=st-1; j=dr+1;
pivot=st+rand()%(dr-st+1);
val=A[pivot];
while(1) {
do i++; while(A[i]<val);
do j--; while(A[j]>val);
if(i<j)
swap(A[i],A[j]);
else
return j;
}
}
void qsort(int st, int dr, int A[]) {
int mij;
if(st<dr) {
mij=part(st,dr,A);
qsort(st,mij,A);
qsort(mij+1,dr,A);
}
}
int main() {
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
int A[Nmax], n, i;
srand(time(0));
scanf("%d",&n);
for(i=1; i<=n; i++)
scanf("%d",&A[i]);
qsort(1,n,A);
for(i=1; i<=n; i++)
printf("%d ",A[i]);
printf("\n");
return 0;
}