Pagini recente » Cod sursa (job #2826076) | Cod sursa (job #1431467) | Cod sursa (job #1298021) | Cod sursa (job #1661577) | Cod sursa (job #2987764)
#include <bits/stdc++.h>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
const int NMAX = 5e5 + 5;
int n, a[NMAX];
void afisare(){
for(int i=1;i<=n;++i){
g << a[i] << " ";
}
}
int medianOfThree(int a, int b, int c){
if((a < b && b < c) || (c < b && b < a)){
return b;
}
else if((b < a && a < c) || (c < a && a < b)){
return a;
}
else{
return c;
}
}
void quicksort(int a[], int st, int dr){
if(st < dr){
// int range = dr - st + 1;
// int m1 = (rand() % range) + st, m2 = (rand() % range) + st, m3 = (rand() % range) + st;
// int pivot = medianOfThree(a[m1], a[m2], a[m3]);
// int poz;
// if(pivot == a[m1]){
// poz = m1;
// }
// else if(pivot == a[m2]){
// poz = m2;
// }
// else{
// poz = m3;
// }
int pivot = a[(st + dr) / 2], poz = (st + dr) / 2;
int i = st - 1;
for(int j=st;j<=dr;++j){
if(a[j] < pivot){
i++;
if(i == poz){
poz = j;
}
swap(a[i], a[j]);
}
}
swap(a[++i], a[poz]);
quicksort(a, st, i - 1);
quicksort(a, i + 1, dr);
}
}
int main(){
f >> n;
for(int i=1;i<=n;++i){
f >> a[i];
}
quicksort(a, 1, n);
afisare();
return 0;
}