Pagini recente » Cod sursa (job #488305) | Cod sursa (job #2801600) | Cod sursa (job #87533) | Cod sursa (job #829719) | Cod sursa (job #2278255)
#include<fstream>
#include<cstdlib>
#include<time.h>
using namespace std;
ifstream cin("algsort.in");
ofstream cout("algsort.out");
int n,v[500005];
int chose_pivot(int s,int d){
int r[3];
for(int i=0;i<3;++i)
r[i]=rand()%(d-s+1)+s;
if(v[r[0]]<=v[r[1]] && v[r[0]]<=v[r[2]])
return (v[r[1]]<=v[r[2]]?v[r[1]]:v[r[2]]);
if(v[r[1]]<=v[r[0]] && v[r[1]]<=v[r[2]])
return (v[r[0]]<=v[r[2]]?v[r[0]]:v[r[2]]);
if(v[r[2]]<=v[r[0]] && v[r[2]]<=v[r[1]])
return (v[r[0]]<=v[r[1]]?r[0]:v[r[1]]);
}
void quicksort(int s,int d){
if(d-s+1<=1) return;
int pivot=chose_pivot(s,d),i=s,j=d;
while(i<=j){
while(v[i]<pivot) ++i;
while(v[j]>pivot) --j;
if(i<=j){
swap(v[i],v[j]);
++i; --j;
}
}
quicksort(s,j);
quicksort(i,d);
}
int main(){
srand(time(NULL));
cin>>n;
for(int i=1;i<=n;i++)
cin>>v[i];
quicksort(1,n);
for(int i=1;i<=n;i++)
cout<<v[i]<<' ';
}