Pagini recente » Cod sursa (job #649366) | Cod sursa (job #702212) | Cod sursa (job #2158021) | Cod sursa (job #1393775) | Cod sursa (job #842233)
Cod sursa(job #842233)
#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 end=dr-1;
int i=st;
while(i<end){
if( v[i] < v[dr] ){
i++;
}
else{
swap(end,i);
end--;
}
}
if( v[end] > v[dr]){
swap(end,dr);
}
else{
swap(end+1,dr);
end++;
}
quicksort(st,end-1);
quicksort(end+1,dr);
}
int main(int argc, char* argv[])
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&N);
int i;
for(i=1;i<=N;i++)
scanf("%d",&v[i]);
quicksort(1,N);
print();
return 0;
}