Pagini recente » Cod sursa (job #76888) | Cod sursa (job #2626985) | Cod sursa (job #3153401) | Cod sursa (job #920926) | Cod sursa (job #3003736)
#include <bits/stdc++.h>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int a[500005];
void median_of_three(int a[], int st, int dr){
int mij = st + (dr - st) / 2;
if(a[st] > a[mij]){
swap(a[st], a[mij]);
}
if(a[st] > a[dr]){
swap(a[st], a[dr]);
}
if(a[mij] > a[dr]){
swap(a[mij], a[dr]);
}
swap(a[mij], a[dr - 1]);
}
int partition_vec(int a[], int st, int dr){
median_of_three(a, st, dr);
int pivot = a[dr];
int i = st - 1;
for(int j = st; j <= dr; ++j){
if(a[j] < pivot){
swap(a[++i], a[j]);
}
}
swap(a[i + 1], a[dr]);
return (i + 1);
}
void quicksort(int a[], int st, int dr){
if(st < dr){
int pi = partition_vec(a, st, dr);
quicksort(a, st, pi - 1);
quicksort(a, pi + 1, dr);
}
}
int main(){
int n;
f >> n;
for(int i=1;i<=n;++i){
f >> a[i];
}
quicksort(a, 1, n);
for(int i=1;i<=n;++i){
g << a[i] << " ";
}
return 0;
}