Mai intai trebuie sa te autentifici.
Cod sursa(job #2278272)
| Utilizator | Data | 7 noiembrie 2018 15:53:31 | |
|---|---|---|---|
| Problema | Sortare prin comparare | Scor | 60 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 0.99 kb |
#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 r1,r2,r3;
r1=rand()%(d-s+1)+s;
r2=rand()%(d-s+1)+s;
r3=rand()%(d-s+1)+s;
if(v[r1]<=v[r2] && v[r1]<=v[r3])
return (v[r2]<=v[r3]?v[r2]:v[r3]);
if(v[r2]<=v[r1] && v[r2]<=v[r3])
return (v[r1]<=v[r3]?v[r1]:v[r3]);
if(v[r3]<=v[r1] && v[r3]<=v[r2])
return (v[r1]<=v[r2]?r1:v[r2]);
}
void quicksort(int s,int d){
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;
}
}
if(j>s)quicksort(s,j);
if(i<d)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]<<' ';
}
