Pagini recente » Cod sursa (job #289766) | Cod sursa (job #2242591) | Cod sursa (job #157482) | Cod sursa (job #382212) | Cod sursa (job #842247)
Cod sursa(job #842247)
#include <stdio.h>
#define MAXN 500001
int N;
int v[MAXN];
void print()
{
int i;
for(i=1;i<=N;i++)
printf("%d ",v[i]);
printf("\n");
}
void swap(int x, int y)
{
int aux = v[x];
v[x] = v[y];
v[y] = aux;
}
void quicksort(int st, int dr)
{
if(st >= dr)
return;
else if( dr == st+1 ){
if( v[st] > v[dr] ){
swap(st,dr);
return;
}
}
swap(st+rand()%(dr-st),dr);
int store=st-1;
int i;
for(i=st;i<dr;i++){
if( v[i] < v[dr] ){
store++;
swap(store,i);
}
}
swap(store+1,dr);
quicksort(st,store);
quicksort(store+2,dr);
}
int main(int argc, char* argv[])
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&N);
srand(time(NULL));
int i;
for(i=1;i<=N;i++)
scanf("%d",&v[i]);
quicksort(1,N);
print();
return 0;
}