Pagini recente » Cod sursa (job #2108227) | Cod sursa (job #1435378) | Cod sursa (job #1539434) | Cod sursa (job #998831) | Cod sursa (job #373103)
Cod sursa(job #373103)
/*
* sortare cu quicksort. pentru a preveni cazurile ordonate, luam ca
* pivot un element aleator din intervalul st - dr.
* */
#include <cstdio>
#include <ctime>
#include <cstdlib>
using namespace std;
int a[500010],n;
void read(){
scanf("%d",&n);
for(int i=0;i<n;++i)
scanf("%d",a+i);
}
void write(){
for(int i=0;i<n;++i)
printf("%d ", *(a+i));
}
void qs(int st,int dr){
if(st<dr){
int i=st,j=dr,d,aux;
d=random() %(dr-st+1);
aux=a[st]; a[st] = a[d]; a[d]=aux;
d=0;
while(i<j){
if(a[i]>a[j]){
aux=a[i], a[i]=a[j], a[j]=aux;
d=1-d;
}
i+=d;
j-=1-d;
}
qs(st,i-1);
qs(i+1,dr);
}
}
int main(){
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
srand(time(0));
read();
qs(0,n-1);
write();
return 0;
}