Pagini recente » Cod sursa (job #1578236) | Cod sursa (job #1972416) | Cod sursa (job #680796) | Cod sursa (job #472160) | Cod sursa (job #3202442)
#include <bits/stdc++.h>
using namespace std;
int v[500001];
pair <int, int> partition(int st, int dr){
int i = st - 1, j = st;
for(; j < dr; j++){
if(v[j] <= v[dr]){
i++;
swap(v[i], v[j]);
}
}
swap(v[i + 1], v[dr]);
int stop = i + 1;
i = st - 1, j = st;
for(; j < stop; j++){
if(v[j] <= v[stop] - 1){
i++;
swap(v[i], v[j]);
}
}
return {i, stop + 1};
}
void quickSort(int st, int dr){
if(st >= dr)
return ;
int pos = rand() % (dr - st + 1) + st;
swap(v[dr], v[pos]);
pair <int, int> piv = partition(st, dr);
quickSort(st, piv.first);
quickSort(piv.second, dr);
}
int main() {
int n;
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
srand(time(NULL));
scanf("%d", &n);
for(int i = 1; i <= n; i++){
scanf("%d", &v[i]);
}
quickSort(1, n);
for(int i = 1; i <= n; i++)
printf("%d ",v[i]);
return 0;
}